结果:
两种随机效果相同,索引随机出不重复的数值
代码如下:
/// <summary>
/// 链表索引法随机
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public int[] GetIndexRandomNum1(int min, int max)
{
var count = max - min;
var numList = new List<int>(count);
var result = new int[count];
for (int i = min; i < max; i++)
{
numList.Add(i);
}
for (int i = 0; i < count; i++)
{
var index = UnityEngine.Random.Range(0, numList.Count);
result[i] = numList[index];
numList.RemoveAt(index);
}
return result;
}
/// <summary>
/// 数组索引法随机
/// </summary>
/// <param name="minValue"></param>
/// <param name="maxValue"></param>
/// <returns></returns>
public static int[] GetIndexRandomNum2(int minValue, int maxValue)
{
System.Random random = new System.Random();
int sum = Mathf.Abs(maxValue - minValue);//计算数组范围
int site = sum;//设置索引范围
int[] index = new int[sum];
int[] result = new int[sum];
int temp = 0;
for (int i = minValue; i < maxValue; i++)
{
index[temp] = i;
temp++;
}
for (int i = 0; i < sum; i++)
{
int id = random.Next(0, site - 1);
result[i] = index[id];
index[id] = index[site - 1];//因id随机到的数已经获取到了,用最后的一个数来替换它
site--;//缩小索引范围
}
return result;
}