确保绝对随机数(无重复)

在使用 C# 产生随机数时,一般来说大家都不希望会有重复的出现,但有时候确很难避免这种情况发生。

如在运行一个程序时,要连续产生多个随机数,而且期间的时间间隔非常短,这时候就会出问题了,最基本的产生随机数写法是:

 
 
1
Random r = new Random ( ) ;

但这事必不能解决上面所提的情况,会产生很多完全相同的随机数,所以必须在产生时添加一个随机数因子的参数,这样可以避免出现重复的可能性,不过这个随机数因子要如何确定呢?

我之前试过使用时间毫秒来做,感觉应该算是可以的了:

 
 
1
Random r = new Random ( unchecked ( ( int ) ( DateTime . Now . Ticks ) ) ) ;

这也是MSDN上的做法了,不过就算这样,现在的电脑运行速度还是太快了,所以一样会有机会出现重复的,而且机会还不少哦,然后我就尝试每次运行前将 Tick 加 1,不过总还是不能彻底解决,只是将机率减少而已。

不过解决的办法总会有的,其实有一个绝对可以保证无重复的方法,就是使用 GUID 来做随机因子,大家都知道,GUID是绝对不可能重复的啦,所以用其来做因子就是最好的选择,代码如下:

 
 
1
Random r = new Random ( Guid . NewGuid ( ) . GetHashCode ( ) ) ;
呵,这样就可以解决以上的重复问题了! :biggrin:

转载于:https://www.cnblogs.com/gooddasenlin/archive/2011/04/23/2025414.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值