【发布时间】:2014-04-13 20:14:48
【问题描述】:
调用Array#shuffle 随机打乱一个数组,但我想重复地打乱 - 即,每次都以相同的方式。有没有办法呢?例如,我想打电话给shuffle_with_key(123),每次都得到相同的结果。
【问题讨论】:
调用Array#shuffle 随机打乱一个数组,但我想重复地打乱 - 即,每次都以相同的方式。有没有办法呢?例如,我想打电话给shuffle_with_key(123),每次都得到相同的结果。
【问题讨论】:
Array#shuffle 可以采用种子Random 实例。
a = [1,2,3,4]
seed = 1
a.shuffle(random: Random.new(seed))
# => [4, 1, 3, 2]
a.shuffle(random: Random.new(seed))
# => [4, 1, 3, 2]
只需将seed = 1 替换为您想要使用的任何随机种子即可。
【讨论】:
是的,有。看下面:
(arup~>~)$ pry --simple-prompt
>> a = [ 1, 2, 3 ]
=> [1, 2, 3]
>> a.shuffle(random: Random.new(1))
=> [1, 3, 2]
>> a.shuffle(random: Random.new(1))
=> [1, 3, 2]
>> a.shuffle(random: Random.new(1))
=> [1, 3, 2]
>> a.shuffle(random: Random.new(1))
=> [1, 3, 2]
>> a.shuffle(random: Random.new(1))
=> [1, 3, 2]
>> a.shuffle(random: Random.new(2))
=> [3, 2, 1]
>> a.shuffle(random: Random.new(2))
=> [3, 2, 1]
>> a.shuffle(random: Random.new(2))
=> [3, 2, 1]
阅读shuffle(random: rng) → new_ary的文档
可选的 rng 参数将用作随机数生成器。
你的方法看起来像:-
def shuffle_with_key(ary,rng)
ary.shuffle(random: Random.new(rng))
end
【讨论】: