Select 与 Reject
本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 21 课,共 56 课。
select 方法会返回一个新数组,其中只包含代码块返回真值的元素。这就是 Ruby 中“筛选”的写法。
numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect # [2, 4, 6]reject 与它相反,它会保留代码块返回 false 的所有元素:
odds = numbers.reject { |n| n.even? }
puts odds.inspect # [1, 3, 5]两者都会返回一个新数组,原数组不会被修改。
这个代码块只是一个谓词,任何结果为真或假的表达式都可以:
words = ["hi", "hello", "hey", "yo"]
long = words.select { |w| w.length >= 3 }
puts long.inspect # ["hello", "hey"]挑战
入门读取一个以逗号分隔的整数列表。输出两行:
- 大于
10的数字(使用select),并用,连接 - 不能被
3整除的数字(使用reject),并用,连接
输入 3,7,12,15,20 时,输出为:
12, 15, 20
7, 20亲手试试
numbers = gets.chomp.split(",").map(&:to_i)
# TODO:第 1 行,将 numbers 中大于 10 的数用 ", " 连接
# TODO:第 2 行,将 numbers 中不能被 3 整除的数用 ", " 连接
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
5Enumerable 的强大功能
Select 与 Reject链式调用 MapReduce / Injectcount、all?、any?、none?group_by 与 partitionsort_by、min_by、max_by回顾:数据管道自己练习: Ruby 在线编译器