Ruby 生成递增随机数轨道
我有一个随机数生成器代码:Ruby 生成递增随机数轨道,ruby,Ruby,我有一个随机数生成器代码: 5.times.map { [*0..9].sample }.join.to_i 它给我随机数,比如63832433734998。正如你们所看到的,它们是完全随机的,但如何使它们比我只会得到一个增加的方式?不是63832,42337,34998,而是34998,42337,63832(这只是一个例子,理想情况下我会得到smth,比如00[number]=>0025,其中25是生成的随机数 希望我的解释是可以理解的:)如果您有当前/最后一个随机数,只需向其中添加一个随
5.times.map { [*0..9].sample }.join.to_i
它给我随机数,比如63832433734998
。正如你们所看到的,它们是完全随机的,但如何使它们比我只会得到一个增加的方式?不是63832,42337,34998
,而是34998,42337,63832
(这只是一个例子,理想情况下我会得到smth,比如00[number]
=>0025
,其中25是生成的随机数
希望我的解释是可以理解的:)如果您有当前/最后一个随机数,只需向其中添加一个随机数即可生成一个更大的随机数,例如:
def generate(base = 0)
base + rand(1_000..10_000)
end
number = generate #=> 9635
number = generate(number) #=> 17761
number = generate(number) #=> 22082
number = generate(number) #=> 31061
每个数字都比前一个数字大1000到10000。如果要生成已知范围内的所有随机数,可以采用另一种方法: 然而,这仅在您希望提前获取所有随机数,而不是持续生成更大的新随机数时才起作用 如果您的上限非常大,这也不是一个好方法-例如,这将冻结您的系统并需要取消:
[*1..10000000000].sample(5).sort
…但在这种情况下,由于数字如此之大,你肯定可以避免发生碰撞的微小风险:
5.times.map{ rand(1..10000000000) }.sort
# => [460188573, 555213355, 3576967759, 3994239233, 9570165205]
您试图解决的问题是什么?顺便说一句,您的示例代码相当于
rand(100_000)
您需要特定数量的排序随机数吗?或者您是否需要一个方法返回一个随机数,条件是它大于最后一个随机数?如果第一个随机数返回为99999怎么办?您希望您的方法下一步做什么?
5.times.map{ rand(1..10000000000) }.sort
# => [460188573, 555213355, 3576967759, 3994239233, 9570165205]