Menu
CoddyTech

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]

像阅读流水线一样,从上到下阅读每个链。每一步都会生成一个新数组,不会修改原数组。

challenge icon

挑战

简单

读取两行输入:

  1. 以逗号分隔的整数列表
  2. 一个整数 min

分别在不同的行上输出:

  1. 严格大于 min 的整数,并用 , 连接(如果没有符合条件的整数,则输出空内容)
  2. 符合条件的整数的平方,并用 , 连接
  3. 符合条件的整数的数量

将 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 筛选一次,再映射为平方值;打印两者,然后计数。
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Swift 在线编辑器