Filter
本课属于 Coddy Swift 学习旅程的“逻辑与流程”单元。第 24 课,共 56 课。
filter 接收一个谓词闭包,并返回一个新数组,其中只包含闭包返回 true 的元素。
let nums = [1, 2, 3, 4, 5, 6]
let evens = nums.filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6]结果会保留原始顺序。结果类型与输入类型相同,不会进行任何转换,只会进行筛选。
filter 可以自然地与 map 链式调用:
let big = nums
.filter { $0 > 2 }
.map { $0 * $0 }
print(big) // [9, 16, 25, 36]像阅读流水线一样,从上到下阅读每个链。每一步都会生成一个新数组,不会修改原数组。
挑战
简单读取两行输入:
- 以逗号分隔的整数列表
- 一个整数
min
分别在不同的行上输出:
- 严格大于
min的整数,并用,连接(如果没有符合条件的整数,则输出空内容) - 符合条件的整数的平方,并用
,连接 - 符合条件的整数的数量
将 filter 和 map 链式调用。不要对输入迭代两次。
第 1 行输入 1,5,2,8,3,7,第 2 行输入 4 时,输出为:
5,8,7
25,64,49
3亲手试试
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
let min = Int(readLine()!)!
// TODO:先按 > min 筛选一次,再映射为平方值;打印两者,然后计数。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Swift 在线编辑器