配列(リスト)に特定の条件にマッチする要素が含まれているかどうかを検査するには (any / any? / exists / find)

配列(リスト)に特定の条件にマッチする要素が含まれているかどうかを検査する方法。

Rubyでいう any?

Scala

Listクラスなどにexistsというメソッドが、Rubyのany?メソッドに相当するものとして存在する。 findというメソッドは条件にマッチする最初の要素を取得し、見つからなければNoneを返す。

Signature:

val lst = List(1, 2, 3);

val result1 = lst.exists(_ % 2 == 0);
println(result1); // => true

val result2 = lst.exists(_ > 3);
println(result2); // => false

IterableList などの SeqSetMap の共通のスーパークラス(トレイト)なので、これらのメソッドは SetMap でも使える。

Python

any という組み込み関数がある。 Python2でもPython3でも使える。

lst = [1, 2, 3]

print(any(elem % 2 == 0 for elem in lst))
# => True

... for ... in ... のような表記は、[] で囲んでリスト内包表記として使う他に、 [] で囲まずにジェネレータ式というものにして any の引数に直接渡す使い方もあるらしい。 any にはリスト内包表記よりもジェネレータ式を渡したほうが速い。

lst = [1, 2, 3]

print(any(elem > 3 for elem in lst))
# => False

ジェネレータ式 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html?highlight=generator#genexpr

ジェネレータ式 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html?highlight=generator#genexpr

Ruby / JRuby

Enumerable#any?メソッドを使う。 ArrayEnumerableをインクルードしているので、配列でもEnumerableのメソッドを使える。

arr = [1, 2, 3]

p arr.any? { |elem| elem % 2 == 0 }
# => true

p arr.any? { |elem| elem > 3 }
# => false

Enumerable#any? | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/any=3f.html

関連

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク