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

Rai*_*ner 3 ruby arrays shuffle

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

use*_*951 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]
Run Code Online (Sandbox Code Playgroud)

只需替换seed = 1您想要使用的随机种子.


Aru*_*hit 5

就在这里。看看下面:

(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]
Run Code Online (Sandbox Code Playgroud)

阅读文档 shuffle(random: rng) ? new_ary

可选的 rng 参数将用作随机数生成器。

你的方法看起来像:-

def shuffle_with_key(ary,rng)
  ary.shuffle(random: Random.new(rng))
end
Run Code Online (Sandbox Code Playgroud)