記事内にはプロモーションが含まれています

【Ruby】配列を結合する4つの方法!concatやjoinの使い分けと重複削除のテクニック

【Ruby】配列を結合する4つの方法!concatやjoinの使い分けと重複削除のテクニック Ruby

Rubyで開発を行っていると、複数の配列を一つにまとめたり、配列の中身を繋げて文字列にしたりといった「結合」操作は頻繁に発生します。

しかし、Rubyには配列を操作するメソッドが豊富に用意されているため、「+concat は何が違うの?」「結合した後に重複を消したい」といった疑問を持つことも少なくありません。

配列の結合は、新しい配列を作るのか、元の配列を変更するのか(破壊的変更)によって選び方が変わります。

この記事では、Rubyにおける配列結合の主要なメソッドの使い方と、それぞれの特徴、そして実務で役立つ重複排除のテクニックまでをサンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

配列同士を結合する基本の方法(+ 演算子)

最も直感的で、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_agroup_b の両方に含まれていた 34 が、結果の配列では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の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。