例如,要生成3到10之间的随机数,我使用:rand(8) + 3
有没有更好的方法(比如rand(3,10)) ?
例如,要生成3到10之间的随机数,我使用:rand(8) + 3
有没有更好的方法(比如rand(3,10)) ?
当前回答
Random.new.rand(a..b)
a是最小值,b是最大值。
其他回答
你可以使用范围操作符。请注意这两种形式的区别:
3..10 # includes 10
3...10 # doesn't include 10
请看这个答案:在Ruby 1.9.2中有,但在早期版本中没有。我个人认为rand(8) + 3很好,但如果你感兴趣,可以查看链接中描述的Random类。
下面是#sample和#rand的快速基准测试:
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)
所以选rand(a。b)是正确的
def random_int(min, max)
rand(max - min) + min
end
rand(3..10)
内核#兰德
当max是一个Range时,rand返回一个Range .member?(number) == true的随机数。