ここでArray#shuffle!
、配列オブジェクトがどのように機能するかを確認しようとしていました。だから私は私の中でそれで遊んで始めましたIRB
:
[1,2,3]
#=> [1, 2, 3]
[1,2,3].shuffle!
#=> [3, 1, 2]
上記のコードでは、それがどのように機能するかを理解しました。そして、以下は、隅々から見るのが難しい方法でそれをいじろうとしていました.
[1,2,5]
#=> [1, 2, 5]
[1,2,5]<<[1,2,5]
#=> [1, 2, 5, [1, 2, 5]]
今まで私は元気です。
[1, 2, 5, [1, 2, 5]].shuffle!
#=> [5, 1, 2, [1, 2, 5]]
上記のコードでは混乱があります。それで、以下の質問が頭に浮かびました:
(a)
shuffle!
再帰的に機能しないのはなぜですか? 予想通り、内側の配列の出力[1, 2, 5]
もシャッフルされます。しかし、起こらなかった。(b)
shuffle!
要素配列をシャッフルせず、配列の要素[1, 2, 5]
のみで動作するのはなぜですか? 出力は次のようになると思いました。では、なぜ要素配列はその位置を変更せず、通常の要素だけを変更したのでしょうか?1, 2, 5,
[1, 2, 5, [1, 2, 5]]
[[1, 2, 5],5, 1, 2]
編集:
それが示している非常に興味深い動作:
a=[1,2,4]
#=> [1, 2, 4]
a<<[7,8]
#=> [1, 2, 4, [7, 8]]
a.shuffle!
#=> [[7, 8], 1, 4, 2]
a.shuffle!
#=> [4, 1, [7, 8], 2]
a.shuffle!
#=> [[7, 8], 2, 1, 4]
irb(main):006:0>
シャッフルは本当に任意の順序に従っていますか、それともランダムなシャッフルですか?