【Rubyの基礎】any?メソッドの使い方
  • facebookページ
  • twitterページ
  • 2020.11.27

    【Rubyの基礎】any?メソッドの使い方

    配列の各要素を評価し、どれか1つでも真になったら結果を返す、Rubyのany?メソッドの使い方について、その使用例を紹介しながら解説します。

    any?メソッドの文法

    Rubyには、配列を扱う便利なメソッドが幾つもありますが、その中でも使い方の解り難いメソッドの1つがany?です。次から、any?メソッドについて紹介します。

    なお、any?メソッドは、配列に対して使うメソッドの1つで、すべての要素が偽である場合にfalseを返し、1つでも真の要素があればtrueを返します。また、使い方は3通りあり、単独でも使えますが、パターンを指定したり、配列の各要素に対する判定条件を指定することも可能です。

    単独で使用する

    any?メソッドの最も簡単な使い方は、単独で使う方法です。

    配列.any?

    この場合、配列内に1つでも真(true)が含まれていればtrueを返します。

    この例では、配列arに、trueが1つ含まれているので、ar.any?はtrueを返します。

    パターンを指定する

    any?では、パターンを指定して要素を検査することも可能です。

    配列.any?(パターン)

    上記のようにany?に続けて()でパターンを指定し、配列の要素がそのパターンに一致する場合、trueを返します。

    この例では、any?メソッドで、パターンとして/light/を指定することで、配列に「light」が含まれているかをチェックします。そして、この場合、配列colorsに含まれる「lightgray」に「light」が含まれることから、出力結果はtrueです。

    各要素に対する判定条件を使う

    Rubyには、ループを使わずに配列の要素をチェックする機能が幾つもありましが、any?メソッドもそのように使うことが可能です。この場合、下記のように、「|」で囲った変数に配列の各要素を取り込み、その変数を使い、判定条件を記述できます。

    配列.any? {|アイテム| アイテムを使った判定条件}

    この例では、any?に続く{}内に、配列の各要素をvalに代入し、val > 5という判定条件を指定しています。そして、any?メソッドを適用した配列numsには、これに該当する要素として7があるので、出力結果はtrueです。

    any?を使う場合の注意点

    次から、any?メソッドを使う場合に注意してほしい点について解説します。

    単独で指定する場合の注意点

    any?を単独で使用した場合のfalseとなる条件は、配列の要素全てがnilまたはfalseの場合だけです。そのため、nilやfalseが格納されるに数字や文字列が混じっている場合、それが原因でtrueが出力されます。

    これは、配列作成時に不具合があった場合など、プログラムが誤動作する原因となるので注意してください。

    この例の出力結果は、falseです。

    この例の出力結果は、配列にnilでもfalseでもない、0が含まれているためtrueが出力されます。

    配列が空ならfalseを返す

    any?メソッドは、配列が空の場合、falseを返します。このメソッドだけでは、配列の要素の有無をチェックできないので、必要な場合はlengthメソッドなどで要素の数をチェックしてから、any?を適用してください。

    この例では、空の配列にany?を適用しているので、falseを出力します。

    any?を利用した例

    trueまたはfalseを返すany?は、Rubyのプログラムでも、特定の文字が配列の中に含まれているかをチェックするif文でよく使われます。次に、そのような例を紹介します。

    この例は、any?を使い、配列listsの中に、targetが含まれるかチェックするRubyのプログラムです。targteのRUbyが、listsに含まれているので、この処理では「Rubyはあります」と出力されます。

    Hashの配列でany?を使う方法

    Rubyでは、キーと値のペアで構成されるHash配列もよく使われますが、下記のように記述すると期待した結果になりません。

    この例では、値は全てfalseですが、キーと値のペアが評価されることになり、false以外の値を含む配列にany?を適用するとtrueとなることから、この例ではtrueが出力されます。

    そのため、Hashの場合は、{}でブロックを構成し、Hashのキーと値の2つを||無いの変数に代入し、値のみを評価することで、値のみを評価させることが可能です。

    この例では、Hashのキーと値をブロックに記述した「|k, v|」により、キーをkに、値をvに代入します。そのうえで、vのみを評価すると、全てfalseとなるので、falseが出力されます。

    Hashの配列にany?を使う例

    先ほど、Hashの値として格納されたtrueとfalseを評価する例を紹介しましたが、Hashの値を指定した条件で評価する場合も同じように書けます。次に、Hashの配列を使ったany?の例を紹介します。

    先ほどの文字列をany?でチェックする例と同じ構成を、Hashの配列に適用した例です。この場合、「lists.any? {|key, item| item == target }」で、Hashの値のみ、条件に一致しているかを評価します。そして、この場合、Hashの値の1つが条件の「Ruby」に一致するので、「Rubyはあります」と表示します。

    まとめ

    Rubyには、配列の中の要素を調べたり、操作するための便利なメソッドがたくさんあります。そして、その一つが今回紹介したany?です。単純な配列はもちろん、Hashの配列にも使えます。ぜひ、Rubyのプログラミングで活用してください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE