Rubyで開発を行っていると、複数の配列を一つにまとめたり、配列の中身を繋げて文字列にしたりといった「結合」操作は頻繁に発生します。
+ と concat は何が違うの?」「結合した後に重複を消したい」といった疑問を持つことも少なくありません。配列の結合は、新しい配列を作るのか、元の配列を変更するのか(破壊的変更)によって選び方が変わります。
この記事では、Rubyにおける配列結合の主要なメソッドの使い方と、それぞれの特徴、そして実務で役立つ重複排除のテクニックまでをサンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
配列同士を結合する基本の方法(+ 演算子)
最も直感的で、Ruby初心者にも扱いやすいのがプラス演算子 + を使った結合です。
2つの配列を足し算のように繋げて、新しい配列を作成します。
新しい配列を作成する(非破壊的)
+ 演算子の最大の特徴は、元の配列(レシーバ)を変更せずに、結合された新しい配列を返す点です。
これを「非破壊的」と呼びます。
# 2つの配列を定義
fruits_a = ["apple", "banana"]
fruits_b = ["orange", "grape"]
# + 演算子で結合
result = fruits_a + fruits_b
p result
# => ["apple", "banana", "orange", "grape"]
# 元の配列は変わっていない
p fruits_a
# => ["apple", "banana"]
fruits_a + fruits_b を実行することで、両方の要素を含んだ新しい配列 result が生成されました。
元の fruits_a はそのまま残っているため、データの原本を保持したまま加工したい場合に最適です。
元の配列を変更して高速に結合する(concat)
パフォーマンスを重視する場合や、元の配列自体を更新したい場合は、concat メソッドを使用します。
こちらは「破壊的メソッド」と呼ばれ、メソッドを呼び出した配列そのものを書き換えます。
配列の後ろに要素を追加する(破壊的)
concat は、引数に渡した配列の要素を、レシーバの配列の末尾に直接追加します。
users = ["Tanaka", "Suzuki"]
new_users = ["Sato", "Takahashi"]
# concatで結合(users自体が変更される)
users.concat(new_users)
p users
# => ["Tanaka", "Suzuki", "Sato", "Takahashi"]
# オブジェクトIDを確認(同じオブジェクトのまま)
# puts users.object_id
users.concat(new_users) を実行した後、users の中身が増えていることがわかります。
新しい配列オブジェクトを生成しないため、メモリ効率が良く、大量のデータを結合するループ処理などでは + 演算子よりも高速に動作します。
ただし、元のデータが失われるため、使いどころには注意が必要です。
重複を取り除いて結合する(| 演算子)
「2つのリストを合わせたいけれど、同じデータが二重になるのは防ぎたい」というケースでは、パイプ演算子 | を使用します。
これは集合演算の「和集合」を求める演算子です。
和集合でユニークな配列を作る
| 演算子は、2つの配列を結合した上で、重複する要素を自動的に削除してくれます。
group_a = [1, 2, 3, 4]
group_b = [3, 4, 5, 6]
# | 演算子で結合(重複排除)
unique_result = group_a | group_b
p unique_result
# => [1, 2, 3, 4, 5, 6]
group_a と group_b の両方に含まれていた 3 と 4 が、結果の配列では1つずつになっています。
この演算子も + と同様に非破壊的であり、新しい配列を返します。
タグ機能の実装や、IDリストのマージなどで非常に便利です。
配列の要素を繋げて「文字列」にする(join)
ここまでは「配列と配列」の結合でしたが、実務では「配列の中身を繋げて1つの文字列にしたい」という要望も多いです。
その場合は join メソッドを使用します。
区切り文字を指定して文字列化する
join メソッドは、配列の各要素を文字列に変換し、指定した区切り文字(セパレータ)で連結します。
words = ["Ruby", "on", "Rails"]
# 引数なし(そのまま連結)
p words.join
# => "RubyonRails"
# 空白で連結
p words.join(" ")
# => "Ruby on Rails"
# カンマで連結(CSV形式など)
p words.join(",")
# => "Ruby,on,Rails"
引数を省略すると、要素が隙間なく連結されます。
join(" ") のように区切り文字を渡すことで、単語の間にスペースを入れたり、カンマ区切りのデータを作ったりすることができます。
配列操作の仕上げとして頻繁に使われるメソッドです。
*(アスタリスク)演算子を使った結合
あまり一般的ではありませんが、* 演算子を使っても join と似た動作をさせることができます。
文字列を引数に取ると、その文字で結合した文字列を返します。
data = ["a", "b", "c"]
# join("-") と同じ意味になる
p data * "-"
# => "a-b-c"
data * "-" は data.join("-") と等価です。
コードを短く書くことができますが、可読性の観点からは join を使う方が「結合している」という意図が伝わりやすいため、推奨されることが多いです。
Rubyのスキルを活かして年収を上げる方法
以上、Rubyで配列を結合する4つの方法について解説してきました。
なお、Rubyのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。
Rubyエンジニアの年収や単価は高い傾向にあるため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなRubyの案件を探しやすくなります。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。



