如何每次都以相同的方式对数组进行洗牌?

时间:2014-04-13 20:14:49

标签: arrays ruby shuffle

调用Array#shuffle随机地对一个数组进行随机播放,但我希望每次都以同样的方式重复播放 - 。有没有办法呢?我想打电话,例如shuffle_with_key(123),每次都得到相同的结果。

2 个答案:

答案 0 :(得分:12)

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替换为您要使用的随机种子。

答案 1 :(得分:4)

是的。看下面的内容:

(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