map、select、reject
转换与筛选
map、select、reject 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
使用 map 进行转换
map 会对每个元素运行代码块,从而创建一个新数组。原数组不会改变。
nums = [1, 2, 3]
doubled = nums.map { |n| n * 2 }
puts doubled.inspect
puts nums.inspect对字符串使用 map
map 可以转换任何类型的值,例如将单词转换为大写。
words = ["red", "green"]
puts words.map { |w| w.upcase }.inspect符号快捷方式
如果代码块只调用一个方法,可以使用 &:method 作为快捷方式。
words = ["a", "b", "c"]
puts words.map(&:upcase).inspect带索引使用 map
如果还需要位置,可以链式调用 with_index。
letters = %w[a b c]
result = letters.map.with_index { |l, i| "#{i}:#{l}" }
puts result.inspect使用 select 进行筛选
select(别名为 filter)只保留代码块结果为真的元素。
nums = [1, 2, 3, 4, 5, 6]
evens = nums.select { |n| n.even? }
puts evens.inspect筛选字符串
select 可以处理任何条件,例如只保留较长的单词。
words = ["hi", "hello", "hey", "welcome"]
puts words.select { |w| w.length > 3 }.inspect使用 reject 进行移除
reject 与 select 的作用相反。它会移除代码块结果为真的元素。
nums = [1, 2, 3, 4]
puts nums.reject { |n| n.even? }.inspect链式调用 map 和 select
由于每个方法都会返回一个新数组,因此可以将多个方法链接成一个处理流程。
nums = [1, 2, 3, 4, 5]
result = nums.select { |n| n.odd? }.map { |n| n * 10 }
puts result.inspect同时筛选和转换
filter_map 会在一次遍历中结合筛选和转换:它会保留代码块返回的非假值。
nums = [1, 2, 3, 4]
result = nums.filter_map { |n| n * 2 if n.even? }
puts result.inspect映射并展平
flat_map 会先进行映射,然后将嵌套数组展平一层。
pairs = [[1, 2], [3, 4]]
puts pairs.flat_map { |p| p }.inspect分区
partition 会将集合拆分为两个数组:匹配项和不匹配项。
nums = [1, 2, 3, 4, 5]
evens, odds = nums.partition { |n| n.even? }
puts evens.inspect
puts odds.inspect快速检查
检查您对转换和筛选的理解。
回顾
您已经掌握了转换和筛选:
- 使用
map进行转换,以及使用&:method快捷方式 select/filter和reject- 链式调用、
filter_map、flat_map和partition
下一步:使用 reduce 和 each_with_object 进行聚合。
puts [1, 2, 3, 4].select(&:even?).map { |n| n * n }.inspect常见问题解答
「map、select、reject」课时是免费的吗?
是的 — 「map、select、reject」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「map、select、reject」这节课中我会学到什么?
转换与筛选 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「map、select、reject」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 创建范围
- Enumerable 模块
- map、select、reject
- reduce 与 each_with_object