Menu
CoddyTech

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, Bob

map 和 collect 方法完全相同。Ruby 提供了这两个名称,你可以根据代码的可读性选择使用其中一个。大多数 Ruby 开发者更喜欢 map,因为它更短。

challenge icon

挑战

简单

读取一行输入,其中包含以逗号分隔的整数(例如,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. 将每个数的平方分别打印在单独一行
quiz icon自我测试

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

基础知识中的所有课

自己练习: Ruby 在线编译器