我是Ruby新手。我只想知道是否有以下方式创建随机数的方法:红宝石。随机数发生器
1)生成45个随机数。
2)产生的随机数可以重复仅最多5次
我使用以下方法尝试。
45.times do |x|
puts x.rand(1..9)
end
如何能够做到一些最大发生在5?
我是Ruby新手。我只想知道是否有以下方式创建随机数的方法:红宝石。随机数发生器
1)生成45个随机数。
2)产生的随机数可以重复仅最多5次
我使用以下方法尝试。
45.times do |x|
puts x.rand(1..9)
end
如何能够做到一些最大发生在5?
我会做这样的事情:
Array.new(5) { (1..9).to_a }.flatten.shuffle
这生成其中所有数形式1至9中存在精确至5倍,并随机混洗阵列的阵列。
numbers = Array.new(5) { (1..9).to_a }.flatten.shuffle
3.times do
puts numbers.pop
end
使用pop
返回一个数字,并从阵列中删除:
根据您的需求,你可能会因为它是或pop
从它的下一个随机数使用此阵。这意味着45圈后numbers
阵列将为空。
也可以使用'Array#*'来避免'flatten'。即:'((1..9).to_a * 5).shuffle' – Stefan
'3.times'应该可能是'45.times'。如果直到数组为空而不是在那里具有魔术数字“45”,移除元素会不会更清洁?像'while(n = numbers.pop);放入n; end'。还要注意'pop'移除了_last_元素,这可能是违反直觉的。 – Stefan
@Stefan我完全同意。我的意思是'3.times'部分只是一个例子,如何使用易于粘贴到控制台中的'pop'。我猜OP不只是想编写一个程序,将值输出到控制台。因此IMO取决于这个随机排序数组的使用情况,他可能想要如何使用它的内容。但使用'while'肯定比幻数好。你是对的。 – spickermann
你需要45个随机数在0到5范围内吗? – inaitgaJ
nope。我想创建45个随机数字。但是如果一个数字达到5以上,请停止在随机数中使用该数字。 –
@EjayTan你的解释看起来有点复杂。你想要一个混合数组,其中包含从1到9的每个数字正好5次。 – Stefan