Rubyで、配列などから重複した要素を排除して取り出したいときがあります。そんなときRubyでは、uniqメソッドが使えます。
配列から重複を排除する
以下のような配列があるとします。
1 |
a = [1, 5, 3, 5, 7, 4, 3] |
これを見ると、5が2回、3も2回含まれています。この中で重複したものを除いた正味のものだけを取り出しましょう。
1 2 3 |
numbers = [1, 5, 3, 5, 7, 4, 3] p numbers.uniq #=>[1, 5, 3, 7, 4] |
5と3の重複が排除され表示されました。
文字列から重複を排除する
対象が文字列を要素とする配列でも同じやり方でできます。
下記の配列では、文字列のYamagataが重複しています。
1 2 3 |
areas = ["Hokkaido", "Yamagata", "Okinawa", "Shiga", "Yamagata"] p areas.uniq #=>["Hokkaido", "Yamagata", "Okinawa", "Shiga"] |
Yamagataの重複が排除され表示されました。
重複を排除する破壊的メソッドuniq!
uniqメソッドは、元となる配列に影響を及ぼさない非破壊的メソッドでした。
そのため、以下の例ではuniqメソッドを実行後も元となる配列numbersの要素に影響はありません。
1 2 3 4 5 |
numbers = [1, 5, 3, 5, 7, 4, 3] p numbers.uniq #=>[1, 5, 3, 7, 4] p numbers #=>[1, 5, 3, 5, 7, 4, 3] |
そこで、元の配列の内容を変更したい場合は破壊的メソッドのuniq!を使います。
1 2 3 4 5 |
numbers = [1, 5, 3, 5, 7, 4, 3] p numbers.uniq! #=>[1, 5, 3, 7, 4] p numbers #=>[1, 5, 3, 7, 4] |
uniqを使っても元のデータに変化は何もありませんが、uniq!は元のデータを出力するだけでなく元のデータも変えてしまいます
データの集まりから重複したものを除き正味のものだけを取り出したいときuniq、uniq!を使います。元のデータをそのまま残したいときはuniqを使い、残す必要がないときにはuniq!が使えます。