编写ruby随机数生成器最快的方法是什么?这有学术公式吗?
我这样做,对于10000个随机数,大约需要4秒:

def generate_random_num(count = 1)
  count.times.map do |i|
    # make a setting!
    num = rand(99999)
    num = "0" * (5 - num.to_s.length) + num.to_s
    redo if codes.include?(num)
    codes << num
  end
end

我只想生成多达99999个随机数,都是5位数。有什么建议吗?

最佳答案

这将为您提供10000个前导零的唯一数字(字符串):
(1..10000).to_a.shuffle!.map{|n| n.to_s.rjust(5,'0')}
基准(使用Benchmark.measure):

user       system     total       real
0.020000   0.000000   0.020000 (  0.017471)

不过,我会用:
(1..10000).to_a.shuffle!

哪个更快:
user       system     total       real
0.000000   0.000000   0.000000 (  0.001692)

并在输出每个值时添加前导零。根据Ruby的使用Saeed提到的Fisher-Yates算法。
更新:
因此,要回答您的问题,您可以使用以下代码生成[099999]范围内的10000个唯一随机数:
(0..99999).to_a.shuffle!.slice(0..9999).map{|n| n.to_s.rjust(5, '0')}

基准为:
user       system     total       real
0.020000   0.000000   0.020000 (  0.026122)

关于ruby - 在Ruby中最快实现随机数生成器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4369857/

10-13 00:00