Menu
CoddyTech

链式调用 Map

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 22 课,共 56 课。

你在基础知识中学过 map,它通过转换每个元素来构建一个新数组。将它与 select、reject 等方法组合使用时,它的真正威力才会显现。

每个方法都会返回一个数组,因此可以继续对结果调用其他方法:

numbers = [1, 2, 3, 4, 5]
result = numbers
  .select { |n| n.odd? }
  .map    { |n| n * 10 }
puts result.inspect   # [10, 30, 50]

从上到下读取这个链条:从数字开始,保留奇数,再将每个数字乘以 10。不使用临时变量,也不使用循环。

当代码块只调用一个方法时,快捷写法 &:method_name 就适用:

["hi", "yo"].map { |s| s.upcase }   # ["HI", "YO"]
["hi", "yo"].map(&:upcase)         # ["HI", "YO"](相同)

这种简写在 Ruby 代码中随处可见。看到它时要能认出来。

challenge icon

挑战

简单

读取一个以逗号分隔的单词列表。在一行中输出长度超过 3 个字符的单词,并将它们转换为大写后用 , 连接。

将整个过程串成一个链:用 select选出较长的单词,用 map配合 &:upcase转换它们,然后使用 join连接。

输入 hi,hello,yo,coddy,sup时,输出为:

HELLO, CODDY

亲手试试

words = gets.chomp.split(",")

# TODO:链式调用 select + map(&:upcase) + join
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Ruby 在线编译器