用多線程並發實現不重複的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.
最後更新:2017-04-02 05:21:04