こんにちは!エンジニア兼ライターのヤマシタです。
Rubyには配列の評価を行い、どれか1つでも真になったら結果を返すany?メソッドがあります。
any?メソッドを使用すれば、配列の値を使用する前に配列の評価を行うことができます。
ここでは、そんなany?メソッドについて
【基礎】any?メソッドの基本的な使い方
【発展】ブロックの省略
【発展】if文との組み合わせ
などについて解説いたします。
any?メソッドは配列の評価を行うときに便利なメソッドですので、使い方はよく理解しておきましょう。
any?メソッドとは
any?メソッドは配列の要素を1つずつ評価し、ブロックに記述した条件が真になったらtrueを返すメソッドです。
書き方:
オブジェクト.any? { |要素| ブロック処理}
たとえば、配列の中に指定した要素より大きい値が存在するかなど、条件に一致する値が1つでも存在するか確認したい場合に使用します。
次の章よりany?メソッドの具体的な使い方について見ていきましょう。
any?メソッドの使い方
以下のサンプルプログラムでは、配列の中に30以上の値が存在するかを調べています。
サンプルプログラム:
array = [10, 20, 30, 40, 50] puts array.any? { |w| w > 30 }
実行結果:
true
このプログラムでは、any?メソッドを使用して、配列の中に30以上の値が存在したらtrueを出力しています。
any?メソッドは、ブロックの引数wに配列の要素を順番に格納しながら繰り返し「w > 30」の条件式を実行し、条件式が真になった時点で処理を中断してtrueを返します。
以下の例では10文字の文字列が存在するかを調べています。
サンプルプログラム:
fruits = ["apple", "orange", "melon", "strawberry", "banana", "pineapple"] puts fruits.any? { |w| w.size == 10 }
実行結果:
true
配列の値「strawberry」は10文字なのでtrueを返しました!
ブロックの省略
any?メソッドはブロックを省略した場合は、要素の中に真の値が存在すればtrueを返します。
サンプルプログラム:
array1 = [nil, nil, nil, 100, nil] array2 = [false, true, false] puts array1.any? puts array2.any?
実行結果:
true ture
このようにブロックを省略した場合は、配列の中に値が存在した場合やtrueが存在した場合にtrueを返します。
if文との組み合わせ
any?メソッドは条件に一致した要素が存在する場合や配列の要素チェックが可能なため、
if文と組み合わせて、配列の中身をあらかじめチェックしたい場合に使用すると便利です。
サンプルプログラム:
array1 = [nil, nil, nil, 100, nil] array2 = [false, false, false] array3 = [10, 20, 30, 40, 50] if array1.any? puts "array1 OK!" else puts "array1 NG" end if array2.any? puts "array2 OK!" else puts "array2 NG" end if array3.any? { |w| w == 30 } puts "array3 OK!" else puts "array3 NG" end
実行結果:
array1 OK! array2 NG array3 OK!
配列の要素が全て真か調べたい場合
配列の要素が一部ではなく、全て真の場合か確認したい場合はall?メソッドを使用します。
all?メソッドについては以下の記事で詳しく解説しています!
まとめ
ここではany?メソッドについて、
- any?メソッドとは
- any?メソッドの基本的な使い方
- ブロック処理を省略する使い方
- if文との組み合わせ方法
などについて解説しました。
any?メソッドを使用すれば、配列を使用する前に配列の評価を行うことができますので、その後起こりうるエラーを回避することができます。
もし、any?メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!