用多线程并发实现不重复的N个伪随机自然数

def NoRep(count) vnow=0 ts=[] count.times do |i| ts[i]=Thread.new do sleep(rand(0.01)) Thread.current["val"]=vnow vnow+=1 end end ary=[] ts.each{|t|t.join;ary<<t["val"]} ary end p NoRep(100)

 

而另一种不用线程并发的方式为:

 

def NoRep(n) a=(1..n).to_a ac=[] until a.empty? idx=rand(a.size) x=a[idx] a.delete(x) ac<<x end ac end

 

文档上说r1.9有Array#choice方法,结果没找到,so...如上。

 

还有一种方法: (1..100).to_a.sort_by {rand}

 

最后有一种更简单的方式:Array#shuffle.

 

你可能感兴趣的:(多线程,文档)