查看: 17414|回复: 9
打印 上一主题 下一主题

[其他] Unity利用C#生成随机不重复的随机数(转载)

[复制链接]

711

主题

10

听众

5805

积分

高级设计师

Rank: 6Rank: 6

纳金币
2954
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-4-30 02:51:45 |只看该作者 |倒序浏览
  大家都知道,很多时候我们在做项目的过程中都会用到随机算法,需要生成一些随机数。但如果利用C#本身或者unity自身带的random方法来生成随机数的话,都会有重复的现象。前段时间特别研究了一下如何生成不重复的随机数,现在分享给大家,希望能对大家有用。大家如果有更好的随机不重复算法,也可以再评论下大家共同讨论下。
      
    下面是源码:
  1. public static int[] getRandoms(int sum, int max)
  2.     {
  3.         int[] arr = new int[sum];
  4.         int j = 0;
  5.         //表示键和值对的集合。
  6.         Hashtable hashtable = new Hashtable();
  7.         System.Random rm = new System.Random();
  8.         for (int i = 0; hashtable.Count < sum; i++)
  9.         {
  10.             //返回一个小于所指定最大值的非负随机数
  11.             int nValue = rm.Next(max);
  12.             //containsValue(object value)   是否包含特定值
  13.             if (!hashtable.ContainsValue(nValue) && nValue != 0)
  14.             {
  15.                 //把键和值添加到hashtable
  16.                 hashtable.Add(nValue, nValue);
  17.                 //Debug.Log(i);
  18.                 arr[j] = nValue;

  19.                 j++;
  20.             }
  21.         }
  22.         int temp;
  23.         //最多做n-1趟排序
  24.         for (int i = 0; i < arr.Length - 1; i++)
  25.         {
  26.             //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
  27.             for (j = 0; j < arr.Length - i - 1; j++)
  28.             {
  29.                 if (arr[j] > arr[j + 1])
  30.                 {
  31.                     temp = arr[j];
  32.                     arr[j] = arr[j + 1];
  33.                     arr[j + 1] = temp;
  34.                 }
  35.             }
  36.         }

  37.         return arr;
  38.     }
复制代码
我用了一个静态函数,直接复制到类里就可以用了。

除此之外,我还找到了一遍专门写用C#生成不重复的随机数的帖子。大家可以看下。链接:http://blog.csdn.net/lynnlin1122/article/details/2318906
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-4-30 03:56:48 |只看该作者
Thank you for sharing! ) ) )
回复

使用道具 举报

无效楼层,该帖已经被删除

6

主题

2

听众

548

积分

初级设计师

Rank: 3Rank: 3

纳金币
236
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-4-30 10:00:07 |只看该作者
为什么一运行就死在那里了
回复

使用道具 举报

10

主题

8

听众

1877

积分

助理设计师

Rank: 4

纳金币
188
精华
0

活跃会员

5#
发表于 2014-4-30 10:02:58 |只看该作者
这个可以有!!!!
回复

使用道具 举报

0

主题

1

听众

741

积分

初级设计师

Rank: 3Rank: 3

纳金币
12
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-4-30 10:11:43 |只看该作者
謝謝  很有用
回复

使用道具 举报

1

主题

6

听众

2317

积分

中级设计师

Rank: 5Rank: 5

纳金币
7
精华
0
7#
发表于 2014-4-30 11:59:35 |只看该作者
简单实用的东西
回复

使用道具 举报

0

主题

1

听众

2259

积分

中级设计师

Rank: 5Rank: 5

纳金币
512
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2014-4-30 12:36:52 |只看该作者

Thank you for sharing! ) ) )
回复

使用道具 举报

heise    

4

主题

3

听众

4249

积分

中级设计师

Rank: 5Rank: 5

纳金币
105
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2014-4-30 15:04:28 |只看该作者
感谢分享,好东西
回复

使用道具 举报

0

主题

2

听众

4092

积分

中级设计师

Rank: 5Rank: 5

纳金币
530
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2014-5-14 15:47:58 |只看该作者
感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-6-27 15:55 , Processed in 0.072775 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部