Menu
CoddyTech

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? 的结果为 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

挑战

简单

读取一个以逗号分隔的测试成绩列表(整数)。满足以下条件时,班级的成绩才算有效且及格:

  • 没有任何成绩是负数(表示有测试成绩未记录)
  • 所有成绩都不超过 100
  • 至少有一个成绩恰好是 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。

亲手试试

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

# TODO:结合 all?、any?、none? 和 count,判断是 Valid 还是 Invalid
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器