比如我要从 0-9 和 abc......xyz 中生成不重复的 10 位随机数我现在要一次性生成10W个随机数(如果没有10W个不重复的就有多少生成多少), 这样的话就要对算法的要求有点高了,主要是速度要快,这样的算法怎样实现好?麻烦高手们可以指点一点,具体代码分享一下,谢谢!
解决方案 »
- iis wcf 如何使用缓存
- 生成唯一硬件号
- System.Threading.ThreadAbortException: 正在中止线程
- 正则表达式中?:的用法疑惑
- ##########.net打包出错,错误: 应将“wmp.dll”排除,原因是其源文件“C:\WINDOWS\system32\wmp.dll”受到“Windows 系统文件保护”。?#
- 紧急求助!关于网站移植时遇到的问题!在线等!!!
- 求一函数得知程序已经运行的时间.
- 请教::如何取活动目录用户登录名的问题?
- c# IPortableDevicePropVariantCollection pObjectIDs
- 在C#中怎么响应windows的消息?
- 关于自定义控件的问题
- 如果得到DataGrid的排序后当前选择行对应的DataRow
Random rand = new Random(Guid.NewGuid().GetHashCode());
rand .Next(最小值,最大值)
Random rnd = new Random(DateTime.Now.Millisecond);Enumerable.Range(1, 100).OrderBy(Guid.NewGuid());
A...Z .ToCharArray随机获取0-25,取数组字符
也可以是0-5和abc...hij 这个也是用户可以自己选 的,
看清楚问题,是不重复的
关于不重复随机数生成的问题我在七八年前就遇到过,四五年前的时候曾经做过总结,最近看到有人在讨论这个问题,于是就又重新捡起这个话题了。现在捡起这个话题的目的不是想再简单介绍可能的几种算法,而是从思路上去说明,并且将情况慢慢复杂化,想要说明的是程序员们(不限于.NET程序员)不要用固定的思路去解决问题,可能同样的要求在不同的场合下会有不同的做法。明白了思路才能真正做到以不变应万变,学会一两个控件的用法或者多指导一两个API并不算什么本领,能够在遇到以前没有碰到过的问题时迅速简化解决思路才是本领,另一种本领就是遇到错误时如何快速根据经验定位错误产生原因的本领。
10位随机数,每位可能是0-9或a-z
有这么多种可能
3656158440062976
你才只要10W碰撞几率为365亿分之一所以你就随机出来一个放到Hash表里
再随机出来一个看表里有没有,没有就放进去然后就完事了。有什么需要讨论的吗?