1. 程式人生 > >從給定數字集合中隨機取不重複的數字演算法

從給定數字集合中隨機取不重複的數字演算法

遊戲開發過程中,會遇到比如:從給定的10個道具中隨機生成三個給使用者,要求生成的道具相互之間不重複。一般情況下,我們會將道具儲存在一個集合中,然後生成一個隨機數,使用生成的隨機數作為集合的索引,從集合中取出物件,傳遞給例項化函式。這樣做有一個缺點,生成的隨機數是不定的,多次生成的隨機數之間,可能會出現值重複,為了避免這種情況,使用下面的方法來生成隨機數。

private int[] CreateRandomNumber () {
        List<int> nums = new List<int> ();        
        for (int i = 1
; i <= 5; i++) { nums.Add (i); } for (int i = 0; i < 2; i++) { int j = Random.Range (0, 4); nums.Remove (nums[j]); } return nums.ToArray(); }

一、建立需要生成數字的種子庫
二、生成一個隨機值作為陣列的索引,根據生成的索引訪問陣列
三、按照索引,將生成的隨機值從陣列中移除,返回剩餘陣列的值,即可得到三個不同的值

測試如下:

 int[] temp = CreateRandomNumber ();

    for (int i = 0; i < 3; i++)
    {
            Debug.Log (temp[i]);
    }
歡迎訪問我的公眾號:分享一些Unity專案中遇到的一些知識,也會與C++資料結構和演算法相關的知識分享。