How to generate a random number between a and b in Ruby?
例如,为了生成3到10之间的随机数,我使用:
有没有更好的方法(比如
更新:ruby 1.9.3
1 | rand(a..b) |
网址:http://www.rubyinside.com/ruby-1-9-3-introduction-and-changes-5428.html
转换为数组可能太贵,而且这是不必要的。
1 | (a..b).to_a.sample |
或
1 | [*a..b].sample |
阵列α样本
Ruby 1.8.7+中的标准。注:在1.8.7中被命名为choice,在较新版本中被重命名。
但是无论如何,生成数组需要资源,并且您已经编写的解决方案是最好的,您可以这样做。
1 | Random.new.rand(a..b) |
其中,
1 | rand(3..10) |
核αrand
When max is a Range, rand returns a random number where range.member?(number) == true.
请注意范围运算符之间的区别:
1 2 | 3..10 # includes 10 3...10 # doesn't include 10 |
1 2 3 | def random_int(min, max) rand(max - min) + min end |
10和10*24
1 | rand(10**24-10)+10 |
请看这个答案:Ruby1.9.2中有,但在早期版本中没有。我个人认为兰德(8+3)是好的,但如果你感兴趣,请查看链接中描述的随机类。
这里是
1 2 3 4 5 6 7 | irb(main):014:0* Benchmark.bm do |x| irb(main):015:1* x.report('sample') { 1_000_000.times { (1..100).to_a.sample } } irb(main):016:1> x.report('rand') { 1_000_000.times { rand(1..100) } } irb(main):017:1> end user system total real sample 3.870000 0.020000 3.890000 ( 3.888147) rand 0.150000 0.000000 0.150000 ( 0.153557) |
所以,做