はじめてのRuby!uniq・uniq!で重複した値を削除する方法

こんにちは!エンジニア兼ライターのヤマシタです。

Rubyには配列を操作するためのさまざまなメソッドが用意されています。

今日は配列を使用するにあたって、

「配列の中に同じ値が入っている場合に重複した値を削除したい」

という方に向けて、この記事では

【基礎】uniqメソッドとは
【基礎】数値配列の重複した値を削除する方法
【基礎】文字列配列の重複した値を削除する方法
【発展】uniqでブロックを使う方法
【発展】破壊的メソッドuniq!の使い方

について解説いたします。

uniqメソッドは配列から重複した値を削除するのに非常に便利なメソッドですので、使い方をしっかりと理解しておきましょう!

uniqとは

uniqメソッドは、配列の要素の中に同じ値が合った場合に重複した値を削除するときに使用するメソッドです。

uniqメソッドは以下のように記述します。

配列オブジェクト.uniq

返り値には重複した値を削除した配列が返されます。

uniqの基本的な使い方

ここでは実際にuniqメソッドの使い方を見ていきましょう。

数値配列の場合

以下のサンプルでは、数値が格納された配列からuniqメソッドを使用して重複した値を削除しています。

サンプルプログラム:

array1 = [1, 2, 3, 4, 5, 1, 2, 3]

array2 = array1.uniq

p array1
p array2

実行結果:

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

サンプルプログラムでは数値が格納された配列array1に対してuniqメソッドを使用して、返り値をarray2として取得しています。

実行結果のように、配列array2は重複した値が削除されていることがわかりますね!

文字列配列の場合

uniqメソッドは文字列の重複した値も同様に削除できます。

サンプルプログラム:

fruits1 = [“apple”, “orange”, “melon”, “apple”]

fruits2 = fruits1.uniq

p fruits1
p fruits2

実行結果:

[“apple”, “orange”, “melon”, “apple”]
[“apple”, “orange”, “melon”]

重複した文字列が削除されていることがわかりますね!

uniqでブロックを使う方法

uniqメソッドではブロックを渡してより発展的な使い方をすることができます。

たとえば、uniqメソッドは重複した値でも大文字小文字の区別はできません。

そこで、ブロックで大文字を小文字に変えるdowncaseメソッドをブロック処理で実行すれば、大文字小文字を区別しないで重複した値を削除することが実現可能です。

サンプルプログラム:

fruits1 = ["apple", "orange", "melon", "apple", "ORANGE"]
fruits2 = fruits1.uniq {|item| item.downcase }
p fruits2

実行結果:

["apple", "orange", "melon"]

uniq!メソッドの使い方

uniqメソッドは元の配列に影響を与えませんが、「!」が付加されたuniq!メソッドを使用すると元の配列を変更することができます。

このように元の値に影響を及ぼすメソッドのことをRubyでは破壊的メソッドと呼びます。

破壊的メソッドはメソッドに「!」が付加されています。

uniqの場合:

array = [1, 2, 3, 4, 5, 1, 2, 3]
p array.uniq
p array

実行結果:

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

uniq!の場合

array = [1, 2, 3, 4, 5, 1, 2, 3]
p array.uniq!
p array

実行結果:

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

このように破壊的メソッドuniq!の場合は元の配列が変更されていることがわかりますね!

  • 元の値を残して置きたい場合はuniq
  • 元の値を変更したい場合はuniq!

とおぼえておきましょう。

まとめ

ここではuniqメソッドについて、

  • uniqメソッドとは
  • 数値配列の重複した値を削除する方法
  • 文字列配列の重複した値を削除する方法
  • uniqでブロックを使う方法
  • 破壊的メソッドuniq!の使い方

などについて解説しました。

実際の開発の現場でも配列から重複した値を削除する場面に出くわすこともありますので、uniqメソッドの使い方は覚えておきましょう。

もし、uniqメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部として、これまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

おすすめコンテンツ

いまならレッスン期間が2週間延長!この秋、プログラミングを学ぼう

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー