配列を使っていると、ある条件に一致した要素のみを検索して取得したい場合があります。
「配列から正規表現のパターンにマッチした要素を取得したい」
「配列から特定の型に一致する要素を取得したい」
配列を正規表現にマッチしたパターンの要素のみを取得したい場合は、grepメソッドを使用すると便利です。
ここではそんなgrepメソッドについて、以下の内容で解説していきます。
・grepメソッドとは
・そもそも正規表現とは
・grepメソッドの使い方
grepメソッドについて、わかりやすく解説していますので、ぜひ参考にしてください。
grepメソッドとは
grepメソッドは、引数に指定したオブジェクトと配列の各要素を「オブジェクト === 各要素」で評価し、結果が真の場合の要素を取得して配列として返します。
grepメソッドは以下のように記述します。
配列.grep(オブジェクト)
正規表現を指定した場合は、パターンにマッチした要素を取得して返します。
引数には正規表現の他、クラスを指定した場合は一致したクラスに属した要素を取得します。
そもそも正規表現とは
grepメソッドの使い方に入るまえに正規表現についておさらいしておきましょう。
正規表現は主にパターンにマッチした文字列を取得するために使われるもので、あらゆる文字列を検証することができます。
そんな正規表現の基礎の基礎については、以下の記事で詳しく解説しています。
grepメソッドの使い方
正規表現を指定する方法
以下のサンプルでは、grepメソッドの引数に正規表現を指定してパターンにマッチした要素を取得しています。
array = ["1111", "apple", "2222", "orange", "3333", "melon"] p array.grep(/^[0-9]+$/) p array.grep(/^[a-z]+$/)
実行結果:
[“1111”, “2222”, “3333”] [“apple”, “orange”, “melon”]
最初の引数では数字の0〜9だったら取得するパターンを指定し、2番めの引数にはアルファベットのa-zだったら取得する正規表現のパターンを指定しています。
実行結果のとおり、数字と文字列をそれぞれ取得できていることがわかりますね!
クラスを指定する方法
grepメソッドは引数にクラスを指定すると、そのクラスに一致した型の要素を返します。
以下のサンプルをご覧ください。
array = [1111, 10.1, "apple", 10.2, 2222, "orange", 3333, "melon"] p array.grep(Integer) p array.grep(String) p array.grep(Float)
実行結果
[1111, 2222, 3333] [“apple”, “orange”, “melon”] [10.1, 10.2]
このサンプルでは、Integer、String、Floatのクラスを引数にそれぞれ指定し、一致した型の要素を配列として返しています。
ブロックを指定する方法
grepメソッドにブロック処理を記述することによって、grepメソッドの結果が真の要素に対してブロックの処理を実行することができます。
以下のサンプルではパターンにマッチした要素に対して、ブロックの処理でそれぞれ大文字と小文字に変換した配列を返しています。
array = ["1111", "apple", "2222", "ORANGE", "3333", "melon", "BANANA"] p array.grep(/^[A-Za-z]+$/) {|item| item.upcase } p array.grep(/^[A-Za-z]+$/) {|item| item.downcase }
実行結果:
[“APPLE”, “ORANGE”, “MELON”, “BANANA”] [“apple”, “orange”, “melon”, “banana”]
まとめ
ここでは条件に一致する配列の要素を取得するのに便利なgrepメソッドについて解説しました。
・grepメソッドとは
・そもそも正規表現とは
・grepメソッドの使い方
grepメソッドを使用すれば、簡単に正規表現などでマッチする要素を取得できますので使い方についてはよく理解しておきましょう。
もし、grepメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!