Ruby docs for Array#shuffle
を見ると、Random
をジェネレータとして渡すことができます。新しいRandom
を毎回同じシードを使用してシャッフルすると、同じ結果が得られます。
>> arr = %w{John Paul George Ringo}
=> ["John", "Paul", "George", "Ringo"]
>> arr.shuffle(random: Random.new(1))
=> ["Ringo", "John", "George", "Paul"]
>> arr.shuffle(random: Random.new(1))
=> ["Ringo", "John", "George", "Paul"]
>> arr.shuffle(random: Random.new(1))
=> ["Ringo", "John", "George", "Paul"]
編集:これはかなり新しい各時間よりも(一方Random
を使用して、各個別のシャッフル及びshufflingsの配列の両方を繰り返すことができるようにArray#shuffle
は、複数反復shufflingsを生成有するように拡張することができます同じ種子でそれを更新して繰り返す:
>> arr = [1, 2, 3, 4] => [1, 2, 3, 4]
>> r = Random.new(17) => #<Random:0x000000017be4d0>
>> arr.shuffle(random: r) => [3, 1, 4, 2]
>> arr.shuffle(random: r) => [1, 3, 2, 4]
>> arr.shuffle(random: r) => [4, 3, 2, 1]
>> r = Random.new(17) => #<Random:0x00000001c60da8>
>> arr.shuffle(random: r) => [3, 1, 4, 2]
>> arr.shuffle(random: r) => [1, 3, 2, 4]
>> arr.shuffle(random: r) => [4, 3, 2, 1]
>> etc.
?>
私の解決策よりもずっと良い。これを使って。 –
クール、それはよさそうだ。そして私はあなたのビートルズの例が好きです;) – 23tux
それを上品に保ちます。 – iamnotmaynard