以下のようなコードがあります。
a = ["Cat", "Dog", "Mouse"]
s = ["and", "&"]
配列 s
を配列 a
にマージしたいのですが、これは次のようになります。
["Cat", "and", "Dog", "&", "Mouse"]
RubyのArrayやEnumerableのドキュメントを見ても、これを実現するようなメソッドは見当たりません。
各配列を繰り返し処理せずにこれを実現する方法はありますか?
これでは、クリスが求めた順序で結果の配列が得られませんが、結果の配列の順序が重要でなければ、a |= b
とすればよいのです。aを変異させたくない場合は、
a | b`と書いて、その結果を変数に代入することができます。
http://www.ruby-doc.org/core/classes/Array.html#M000275 の Array クラスの set union ドキュメントを参照してください。
この回答は、配列の要素を重複させたくないことを前提としています。最終的な配列の要素が重複することを許容したい場合は、 a += b
とすればうまくいくでしょう。繰り返しになりますが、a
を変異させたくない場合は、a + b
を使用し、その結果を変数に代入してください。
このページに寄せられたいくつかのコメントによると、これらの2つの解決策はどんなサイズの配列でも動作します。
決してエレガントではありませんが、あらゆるサイズの配列に対応しています。
>> a.map.with_index { |x, i| [x, i == a.size - 2 ? s.last : s.first] }.flatten[0..-2]
#=> ["Cat", "and", "Dog", "&", "Mouse"]