Map 和 Collect
本课属于 Coddy Ruby 学习旅程的“基础知识”单元。第 68 课,共 88 课。
each 很适合对元素执行操作,但有时你会想把一个数组转换成一个新数组。map 方法(也叫 collect)正好能做到这一点:它会对每个元素运行你的代码块,并创建一个包含运行结果的新数组。
numbers = [1, 2, 3, 4]
doubled = numbers.map { |n| n * 2 }
puts doubled # 输出:2, 4, 6, 8与 each 的主要区别是,map 会返回一个包含转换后值的新数组。原数组保持不变。
下面是一个实用示例,可将温度从摄氏度转换为华氏度:
celsius = [0, 20, 100]
fahrenheit = celsius.map { |c| c * 9 / 5 + 32 }
puts fahrenheit # 输出:32、68、212你也可以将 map 用于字符串:
names = ["alice", "bob"]
capitalized = names.map { |name| name.capitalize }
puts capitalized # 输出:Alice, Bobmap 和 collect 方法完全相同。Ruby 提供了这两个名称,你可以根据代码的可读性选择使用其中一个。大多数 Ruby 开发者更喜欢 map,因为它更短。
挑战
简单读取一行输入,其中包含以逗号分隔的整数(例如,2,4,6,8,10)。
将输入拆分为整数数组,然后使用 map 方法创建一个新数组,其中每个数字都平方(乘以自身)。
将新平方数组中的每个元素分别打印在单独一行。
例如,如果输入是 2,4,6,8,10,输出应为:
4
16
36
64
100如果输入是 1,2,3,4,5,输出应为:
1
4
9
16
25如果输入是 3,7,11,输出应为:
9
49
121如果输入是 10,输出应为:
100亲手试试
# 读取以逗号分隔的输入
input = gets.chomp
# TODO: 在下方编写你的代码
# 1. 将输入字符串拆分成整数数组
# 2. 使用 map 方法计算每个数的平方
# 3. 将每个数的平方分别打印在单独一行这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Ruby 在线编译器