配列における `<<` と `+` の違い

a = [1, 2, 3]b = [4, 5, 6]a << b  とかで突っ込むと ba の1要素として入ります。

つまり、[1, 2, 3, [4, 5, 6]] ですね。

これを平坦化したいときには a.flatten! とかやると a が破壊的に平坦化されます。

[1, 2, 3, 4, 5, 6]

 

しかし、最初からこれを得たいときには + のほうが処理が自然です。

a + b とかすることで得られます。

でもこれは破壊的メソッドとかがないのでこの値が欲しい時には代入して得る必要があります。

c = a + b

 

例えば配列 ab を足してランダム化したものは

(a + b).shuffle

とか

(a << b).flatten!.sort_by{rand}

とかとすれば得ることができます。