Menu
Coddy logo textTech

count、all?、any?、none?

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 24/56。

ループを書かなくてもコレクションに関する疑問に答えられる、4つの小さなEnumerableメソッド。

countは、ブロックを満たす要素の数を返します:

[1, 2, 3, 4, 5].count { |n| n.even? }   # 2
[1, 2, 3, 4, 5].count                    # 5  (ブロックなし、総数)

all?は、すべての要素がブロックを満たすときにtrueです。

[2, 4, 6].all? { |n| n.even? }    # true
[2, 4, 7].all? { |n| n.even? }    # false

any? は、少なくとも 1 つが該当するときに true です。

[1, 2, 3].any? { |n| n.even? }    # true
[1, 3, 5].any? { |n| n.even? }    # false

none? は、どれも該当しない場合に true になります:

[1, 3, 5].none? { |n| n.even? }   # true

これらのメソッドは短絡評価を行います。any? は最初に一致した時点で停止し、all? は最初に失敗した時点で停止します。コストが低い処理です。

challenge icon

チャレンジ

簡単

カンマ区切りのテスト scores のリスト(整数)を読み取ります。クラスが有効な合格クラスとなる条件は次のとおりです:

  • scores の none? が負ではない(未記録のテストがない)
  • すべての all? scores が最大でも 100 である
  • any? score がちょうど 100 である(満点が少なくとも1つある)
  • 少なくとも3つの scores が >= 70 である(count を使用)

ちょうど1行を出力します:

  • 4つの条件をすべて満たす場合は Valid: <count> passingcount>= 70 の scores の個数)
  • それ以外の場合は Invalid

入力が 72,80,100,65,90 の場合:4つの scores が >= 70、負の値はなく、すべて <= 100、1つが 100 なので、出力は Valid: 4 passing です。

72,80,90 の場合:3つが passing ですが満点がないため、Invalid です。

自分で試してみよう

scores = gets.chomp.split(",").map(&:to_i)

# TODO: all?, any?, none?, count を組み合わせて Valid か Invalid かを判定する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ