count, all?, any?, none?
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 24번째.
루프를 직접 작성할 필요 없이 컬렉션에 대한 질문에 답해주는 네 가지 작은 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? } # falseany?는 적어도 하나가 조건을 만족하면 true입니다:
[1, 2, 3].any? { |n| n.even? } # true
[1, 3, 5].any? { |n| n.even? } # falsenone?은 요소 중 어느 것도 조건을 만족하지 않을 때 true를 반환합니다:
[1, 3, 5].none? { |n| n.even? } # true이 메서드들은 단락 평가(short-circuit)를 수행하며, any?는 첫 번째 일치 항목에서 멈추고, all?는 첫 번째 실패 항목에서 멈춥니다. 이들은 효율적입니다.
챌린지
쉬움쉼표로 구분된 테스트 점수(정수) 목록을 읽습니다. 다음 조건을 만족할 때 해당 학급은 유효한 통과 학급입니다:
- 점수 중
none?(어떤 것도) 음수가 아님 (기록되지 않은 테스트) all?(모든) 점수가 최대100임any?(어떤) 점수 중 하나라도 정확히100임 (최소 한 명의 만점자)- 최소 3개의 점수가
>= 70임 (count를 사용하세요)
정확히 한 줄을 출력합니다:
- 네 가지 조건이 모두 충족되면
Valid: <count> passing을 출력합니다 (count는>= 70인 점수의 개수입니다) - 그렇지 않으면
Invalid를 출력합니다
입력 72,80,100,65,90의 경우: 4개의 점수가 >= 70이고, 음수가 없으며, 모든 점수가 <= 100이고, 하나가 100이므로 출력은 Valid: 4 passing입니다.
72,80,90의 경우: 3개가 통과 기준을 넘었지만 만점이 없으므로 Invalid입니다.
치트 시트
컬렉션에 대한 질문에 답하는 네 가지 Enumerable 메서드입니다:
count – 블록을 만족하는 요소의 수를 반환합니다 (블록이 없는 경우 전체 크기 반환):
[1, 2, 3, 4, 5].count { |n| n.even? } # 2
[1, 2, 3, 4, 5].count # 5all? – 모든 요소가 블록을 만족할 때 true를 반환합니다:
[2, 4, 6].all? { |n| n.even? } # trueany? – 최소한 하나의 요소가 블록을 만족할 때 true를 반환합니다:
[1, 2, 3].any? { |n| n.even? } # truenone? – 어떤 요소도 블록을 만족하지 않을 때 true를 반환합니다:
[1, 3, 5].none? { |n| n.even? } # true이 메서드들은 단락 평가(short-circuit)를 수행합니다: any?는 첫 번째 일치 항목에서 멈추고, all?은 첫 번째 실패 항목에서 멈춥니다.
직접 해보기
scores = gets.chomp.split(",").map(&:to_i)
# TODO: all?, any?, none?, count를 조합하여 Valid vs Invalid를 결정하기
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
5Enumerable의 강력한 기능
Select와 RejectMap 체이닝Reduce / Injectcount, all?, any?, none?group_by와 partitionsort_by, min_by, max_by요약 - 데이터 파이프라인