函数式方法 map/filter/reduce
map/flatMap/compactMap、filter、reduce、sorted/sort
函数式方法 map/filter/reduce
Swift 从函数式编程借鉴了大量高阶方法——组合使用,代码简洁且表达力强。
学完本章你将: 掌握 map/flatMap/compactMap、filter、reduce、链式组合。
map —— 转换
swift
let nums = [1, 2, 3, 4, 5]
// 每个元素 ×2
nums.map { $0 * 2 } // [2, 4, 6, 8, 10]
// 转字符串
nums.map { "\($0)" } // ["1", "2", "3", "4", "5"]
compactMap —— 过滤 nil
swift
let strings = ["1", "2", "abc", "3", ""]
strings.compactMap { Int($0) } // [1, 2, 3]
strings.compactMap { $0.isEmpty ? nil : $0 } // 过滤空字符串
flatMap —— 展平
swift
let nested = [[1, 2], [3, 4], [5]]
nested.flatMap { $0 } // [1, 2, 3, 4, 5]
// Optional 的 flatMap —— 链式可选
let name: String? = "小明"
name.flatMap { $0.isEmpty ? nil : $0.uppercased() } // "小明" 的大写
filter —— 过滤
swift
nums.filter { $0 % 2 == 0 } // [2, 4]——偶数
nums.filter { $0 > 2 } // [3, 4, 5]
reduce —— 归约
swift
nums.reduce(0, +) // 15——求和
nums.reduce(1, *) // 120——阶乘
nums.reduce("") { $0 + "\($1)" } // "12345"——连成字符串
链式组合
swift
let result = nums
.filter { $0 % 2 == 0 } // [2, 4]
.map { $0 * $0 } // [4, 16]
.reduce(0, +) // 20