Z
ZHANK
编程在线教程Swift 教程函数式方法 map/filter/reduce
函数与闭包

函数式方法 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