Ruby配列の重複を消す完全ガイド!uniq・uniq!・to_setでユニーク化【初心者向け】
生徒
「配列に同じ数字や文字がたくさん入ってしまいました…消せますか?」
先生
「Rubyには、配列の重複をまとめて消すための便利な機能があります。」
生徒
「手で一個ずつ消さなくていいんですか?」
先生
「はい。uniqやto_setを使えば、一瞬で整理できますよ。」
1. 配列の重複とは何か?
重複とは、同じ値が何度も配列の中に入っている状態のことです。 例えば、出席名簿に同じ名前が二回書かれていたり、 買い物リストに同じ商品が何度も並んでいる状態を想像すると分かりやすいです。
プログラミングでは、重複したデータがあると、 集計結果がずれたり、表示が見づらくなったりします。 そのため、配列をユニーク化する作業がよく必要になります。
ユニーク化とは、「同じものは一つだけ残す」という意味です。
2. uniq:重複を取り除いた新しい配列を作る
uniqは、配列から重複した要素を取り除き、 新しい配列を作るための命令です。 元の配列はそのまま残るので、初心者でも安心して使えます。
numbers = [1, 2, 2, 3, 3, 3]
p numbers.uniq
[1, 2, 3]
同じ数字が何回出てきても、結果では一回だけ残ります。 「整理したコピーを作る」というイメージを持つと理解しやすいです。
3. 元の配列は変わらない点に注意
uniqを使っても、元の配列の中身は変わりません。 これは「破壊的ではない処理」と呼ばれます。 難しく聞こえますが、「元データを壊さない処理」という意味です。
numbers = [1, 1, 2]
numbers.uniq
p numbers
[1, 1, 2]
元の配列を残したまま整理結果だけ使いたいときに便利です。
4. uniq!:配列そのものを書き換える
uniq!は、配列の中身を直接書き換えて、 重複を取り除く命令です。 名前の最後に「!」が付いているメソッドは、 配列を直接変更することが多いです。
numbers = [1, 2, 2, 3]
numbers.uniq!
p numbers
[1, 2, 3]
元の配列をもう使わない場合や、 メモリを節約したい場合によく使われます。 ただし、元に戻せないので注意が必要です。
5. uniqとuniq!の使い分け
初心者のうちは、基本的にuniqを使うのがおすすめです。 「安全に整理する」感覚で使えます。
uniq!は、配列を直接変更しても問題ないと 分かっているときだけ使いましょう。 ノートを消しゴムで消すイメージに近いです。
6. to_set:集合として重複を許さない考え方
to_setは、配列をSetという特別な箱に変換します。 Setは「同じものを二つ入れられない箱」です。 そのため、自然に重複が消えます。
集合とは、「重複を持たないデータの集まり」という意味です。 数学の集合をイメージすると分かりやすいです。
require 'set'
numbers = [1, 2, 2, 3]
set_numbers = numbers.to_set
p set_numbers
#<Set: {1, 2, 3}>
表示は少し違いますが、重複が消えているのが分かります。
7. Setを使う場面と注意点
Setは、「含まれているかどうか」を調べるのがとても速い特徴があります。 大量のデータを扱うときに向いています。
ただし、配列とは見た目や使い方が少し違うため、 初心者はまずuniqで慣れてから使うと安心です。
8. 重複削除を理解するコツ
重複削除は、「同じものは一つでいい」という考え方が基本です。 名簿整理やチェックリストを思い浮かべながら学ぶと、 配列とユニーク化の仕組みが自然に理解できます。
Rubyの配列操作に慣れてくると、 データ整理がとても楽になります。 焦らず、一つずつ試してみましょう。