配列(リスト)のすべての要素が特定の条件にマッチするかどうかを検査するには (all / all?)

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

Rubyでいう all?

Scala

Listクラスなどに forall というメソッドが、Rubyのall?メソッドに相当するものとして存在する。

Signature:

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

Python

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

lst = [1, 2, 3]

print(all(elem % 2 == 0 for elem in lst))
# => False

print(all(elem <= 3 for elem in lst))
# => True

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

ジェネレータ式 | 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#all?メソッドを使う。 ArrayEnumerableをインクルードしているので、配列でもEnumerableのメソッドを使える。

arr = [1, 2, 3]

p arr.all? { |elem| elem % 2 == 0 }
# => false

p arr.all? { |elem| elem <= 3 }
# => true

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

関連

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