こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、10年目エンジニアです。
この記事では、 Rubyで配列から重複した要素を取り除くことができるuniqメソッドについて
- uniqメソッドとは
- uniqメソッドを使ったサンプルプログラム
と、この記事で丁寧に解説していきます。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Rubyのバージョン | 2.6.6 |
Rubyのインストールは、下の記事をご参考ください。
uniqメソッドとは
uniqメソッドとは、配列から重複している要素を取り除いた配列を返すメソッドです。
「!」がついているuniq!メソッドは破壊的メソッドです。
uniqメソッドは使い方が
- パターン1:ブロックを指定しない場合
- パターン2:ブロックを指定する場合
の合計2パターンあります。
それぞれ解説します。
パターン1:ブロックを指定しない場合
ブロックを指定しない場合、配列から重複している要素を前から削除します。
クラスと値が一致しているときに要素が削除されます。
なので文字列の「1」と数の「1」は違う要素とみなされるため削除されません。
使い方サンプルは以下です。
1 2 |
sample = ["a", "b", "a"] result = sample.uniq |
resultには
1 |
["a", "b"] |
という配列が返されます。
上記サンプルの意味は以下です。
もし配列が空だった場合、空の配列を返します。
パターン2:ブロックを指定する場合
ブロックを指定する場合、各要素にブロック内の処理を行ってから重複しているか要素を削除します。
使い方サンプルは以下です。
1 2 3 4 |
sample = [1, "1", "3"] result = sample.uniq{|str| str.to_s } |
resultには
1 |
[1, "3"] |
という配列が返されます。
上記サンプルの意味は以下です。
もし配列が空だった場合、空の配列を返します。
では、次の章で実際に使ってみます。
uniqメソッドを解説するプログラムの概要
uniqメソッドを解説するプログラムでは、
- パターン1:ブロックを指定しない場合
- パターン2:ブロックを指定する場合
それぞれで、uniqメソッドを使い、結果を表示させます。
Rubyサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
puts "■uniqメソッドサンプル" # パターン1:配列で重複している要素を削除 puts "・パターン1:ブロックを指定しない場合" str_array = ["xyz", "ABC", "XYZ", "ABC"] uniq_no_block_str_array = str_array.uniq puts "確認する配列:#{str_array}" puts "重複を削除 :#{uniq_no_block_str_array}" # パターン2:ブロックで指定した条件の要素を削除 puts "・パターン2:ブロックを指定する場合" uniq_block_str_array = str_array.uniq { |str| str.downcase } puts "確認する配列:#{str_array}" puts "要素を削除 :#{uniq_block_str_array}" |
downcaseメソッドとは、大文字から小文字に変換できるメソッドです。
詳しくはこちらの記事をご参考ください。
実行結果
Rubyプログラムを実行するやり方は、以下の記事をご参考ください。
1 2 3 4 5 6 7 |
■uniqメソッドサンプル ・パターン1:ブロックを指定しない場合 確認する配列:["xyz", "ABC", "XYZ", "ABC"] 重複を削除 :["xyz", "ABC", "XYZ"] ・パターン2:ブロックを指定する場合 確認する配列:["xyz", "ABC", "XYZ", "ABC"] 要素を削除 :["xyz", "ABC"] |
ブロック指定のあるなしで、それぞれ重複している要素が取り除かれていることが確認できました!
まとめ:uniqメソッドを使ってみよう!
以上がuniqメソッドについての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント