void Start()
{
PrintNum();
}
/// <summary>
/// 生成随机数
/// </summary>
/// <param name="num">随机数个数</param>
/// <param name="min">最小随机数(不包含)</param>
/// <param name="max">最大随机数(不包含)</param>
/// 取数范围不包含最大值最小值
/// 最大值不可以小于总数,否则会出错
/// <returns></returns>
private Hashtable GetHashtableRandomNum(int num, int min, int max)
{
System.Random random = new System.Random();//新建随机数
Hashtable hashtable = new Hashtable();//新建哈希表
if (num<max)
{
for (int i = 0; hashtable.Count < num; i++)
{
int nValue = random.Next(min, max);//返回一个非负的随机数,不包含最大值
//判断数字是否重复,且不小于最小值
if (!hashtable.ContainsValue(nValue) && nValue != min)
{
hashtable.Add(i, nValue);//将不重复的数放入哈希表
}
}
}
else
{
//错误提示
throw new System.Exception(string.Format("总数数值 {0} 大于或等于最大值 {1} ",num,max));
}
//返回已经初始化赋值的哈希表
return hashtable;
}
/// <summary>
/// 遍历表中数据
/// </summary>
private void PrintNum()
{
//注意:随机数是什么数据类型,要在遍历循环里面设置好,如果设置为var 则返回的随机数数据类型为Object
foreach (int item in GetHashtableRandomNum(8, 0, 9).Values)
{
Debug.Log(item);
}
}
1.用到哈希表放置随机数,凭个人意愿可以设为字典或泛型。
2.设置随机数范围时,千万不要使随机数总和(Num)小于最大随机数范围(Max),否则系统在运行生成随机数循环时会一直加载,卡死。只能强行退出程序解决
3.代码可以根据个人意愿更改
4.代码非原创