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

チャレンジ

簡単

カンマ区切りのテストスコア(整数)のリストを読み込みます。以下の条件を満たすとき、そのクラスは有効な合格クラスとなります:

  • スコアに負の数(未記録のテスト)がnone?(一つもない)
  • all?(すべての)スコアが100以下である
  • any?(少なくとも一つの)スコアがちょうど100である(少なくとも1つの満点がある)
  • 少なくとも3つのスコアが>= 70である(countを使用)

正確に1行出力してください:

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

入力が72,80,100,65,90の場合:70以上のスコアが4つ、負の数なし、すべて100以下、100が1つあるため、出力はValid: 4 passingとなります。

72,80,90の場合:3つの合格スコアがありますが、満点がないためInvalidとなります。

チートシート

コレクションに関する質問に答える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

any? – 少なくとも1つの要素がブロックを満たす場合にtrueを返します:

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

none? – どの要素もブロックを満たさない場合にtrueを返します:

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

これらのメソッドはショートサーキット(短絡評価)を行います。any?は最初の合致で停止し、all?は最初の失敗で停止します。

自分で試してみよう

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

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

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

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