Random rd = new Random(); // Random 如果不指定种子值,默认使用与时间相关的种子值,
由于运算速度较快,可能连续几次取随机数的时间无限接近,取得的随机数相同。
本例通过 Hashtable 排除重复值,即如果随机数已经取过,则重新取随机数,知道不重复。
当然也可以通过认为设置每次取随机数使用的种子值不同,避免取得相同随机数。
/// <summary>
/// 从1(含)开始到count(含) 取 count 个不重复的随机整数
/// </summary>
/// <param name="counts"></param>
/// <returns></returns>
public static int[] getRandom(int count)
{
Random rd = new Random();
Hashtable ht = new Hashtable();
int value = 0;
int[] intArray = new int[count];
for (int i = 0; i < count; i++)
{
value = rd.Next(1, count + 1);
//已存在则重新取随机数
while (ht.Contains(value))
{
value = rd.Next(1, count + 1);//不包含counts+1
}
intArray[i] = value;
ht.Add(value, value);
}
return intArray;
}