获取随机数算法

.Net技术 码拜 8年前 (2016-03-04) 1025次浏览
现有1至10000000,共一千万个数,每次随机抽取10个数存到数据库,保证每次抽取的数据没有重复,各位高手有何好建议…
解决方案

20

Enumerable.Range(1,10000000).OrderBy(d=>Guid.NewGuid())

然后按分页思路循环每次取10条存数据库即可,即第一次就将全部数据全部打乱了,后面只是分批保存

2

1楼正解获取随机数算法

5

引用 4 楼 y_haoo 的回复:
Quote: 引用 1 楼 starfd 的回复:
Enumerable.Range(1,10000000).OrderBy(d=>Guid.NewGuid())

然后按分页思路循环每次取10条存数据库即可,即第一次就将全部数据全部打乱了,后面只是分批保存

第n次来取值的时候就不能包含前面已经取过的值,怎么处理呢

就是让你先生成1千万个,打乱顺序,以后就从这队列里拿

5

引用 8 楼 y_haoo 的回复:

求指点。

随意方式生成种子表1-1千万,种子表用完可以删除。定义随机数表,三个字段自增id,随机数,使用状态,利用Insert into 随机表(xxx) select (xxx) from 种子表 order by NewID()的方式把种子表的数字乱序插入随机表,使用的时候每次top10后记得把使用状态变更掉,下次就仍然可以top10

2

http://www.jb51.net/article/66255.htm

2

现有1至10000000,共一千万个数,每次随机抽取10个数存到数据库,保证每次抽取的数据没有重复,各位高手有何好建议…

看错了。
这个只能用 GUID 和  红黑表 。将一千万个数放到表里, 再10个一组输出。前提是你电脑的内存得够。

2

var datas = new List<int>();
var rnd = new Random();
while (datas.Count < 10)
{
    var x = rnd.Next(1000000000);
    if (!datas.Contains(x))
        datas.Add(x);
}

2

Random 的随机周期是 65536
所以你必须要备案已经取走的数字

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明获取随机数算法
喜欢 (0)
[1034331897@qq.com]
分享 (0)