從給定數字集合中隨機取不重複的數字演算法
阿新 • • 發佈:2019-01-05
遊戲開發過程中,會遇到比如:從給定的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++資料結構和演算法相關的知識分享。