Menu
CoddyTech

Map

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

map 接收一个闭包,并将它应用于每个元素,返回一个由结果组成的新数组。新数组的长度与原数组相同。

let nums = [1, 2, 3, 4]
let doubled = nums.map { $0 * 2 }
print(doubled)               // [2, 4, 6, 8]

$0 是闭包第一个参数的简写。较长的写法会明确写出参数名称和返回类型:

let doubled = nums.map { (n: Int) -> Int in
    return n * 2
}

map 也可以更改元素类型。通过一个返回 String 的闭包映射 [Int],会得到一个 [String]:

let labels = nums.map { "#\($0)" }
print(labels)                // ["#1", "#2", "#3", "#4"]
challenge icon

挑战

简单

读取一行输入:以逗号分隔的整数列表(华氏温度)。

使用公式 C = (F - 32) * 5 / 9 将每个温度转换为摄氏温度,采用整数运算(向零截断,不保留小数)。分行打印:

  1. 摄氏温度,用 , 连接
  2. 每个温度对应一个标签,前缀为 F=<f> C=<c>,用 ; 连接

两行都使用 map。

对于输入 32,212,98,0,输出为:

0,100,36,-17
F=32 C=0;F=212 C=100;F=98 C=36;F=0 C=-17

亲手试试

let f = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO:第 1 行 = 用 "," 连接的摄氏温度
// TODO:第 2 行 = 用 ";" 连接的标签 "F=<f> C=<c>"
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Swift 在线编辑器