Swift 中的高阶函数有哪些?如何使用 map、filter、reduce?
Swift 中的高阶函数有哪些?如何使用 map、filter、reduce 等函数式编程特性?Swift 提供了丰富的高阶函数,支持函数式编程范式。这些函数可以接受其他函数作为参数或返回函数,使代码更加简洁和声明式。主要的高阶函数:map:对集合中的每个元素应用转换函数返回包含转换后元素的新数组保持原始集合不变示例: let numbers = [1, 2, 3, 4, 5] let doubled = numbers.map { $0 * 2 } // [2, 4, 6, 8, 10] let names = ["alice", "bob", "charlie"] let capitalized = names.map { $0.capitalized } // ["Alice", "Bob", "Charlie"]filter:根据条件筛选集合中的元素返回包含满足条件元素的新数组示例: let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let evenNumbers = numbers.filter { $0 % 2 == 0 } // [2, 4, 6, 8, 10] let words = ["apple", "banana", "pear", "grape"] let longWords = words.filter { $0.count > 4 } // ["apple", "banana"]reduce:将集合中的元素组合成单个值接受初始值和组合函数示例: let numbers = [1, 2, 3, 4, 5] let sum = numbers.reduce(0) { $0 + $1 } // 15 let product = numbers.reduce(1) { $0 * $1 } // 120 let names = ["Alice", "Bob", "Charlie"] let allNames = names.reduce("") { $0 + $1 + " " } // "Alice Bob Charlie "flatMap:对集合中的每个元素应用转换函数,并展平结果处理嵌套数组或可选值示例: let numbers = [[1, 2], [3, 4], [5, 6]] let flattened = numbers.flatMap { $0 } // [1, 2, 3, 4, 5, 6] let optionalNumbers: [Int?] = [1, nil, 3, nil, 5] let nonNilNumbers = optionalNumbers.flatMap { $0 } // [1, 3, 5]compactMap:类似于 map,但过滤掉 nil 值专门用于处理可选值示例: swift let strings = ["1", "2", "three", "4", "five"] let numbers = strings.compactMap { Int($0) } // [1, 2, 4]forEach:对集合中的每个元素执行操作不返回新值示例: swift let numbers = [1, 2, 3, 4, 5] numbers.forEach { print($0) }sorted:对集合进行排序可以自定义排序规则示例: let numbers = [5, 2, 8, 1, 9] let ascending = numbers.sorted { $0 < $1 } // [1, 2, 5, 8, 9] let descending = numbers.sorted { $0 > $1 } // [9, 8, 5, 2, 1]链式调用:let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]let result = numbers .filter { $0 % 2 == 0 } .map { $0 * $0 } .reduce(0) { $0 + $1 }// 220 (2² + 4² + 6² + 8² + 10²)最佳实践:优先使用高阶函数而非 for 循环合理使用链式调用提高代码可读性注意性能影响,避免过度嵌套使用有意义的变量名提高代码清晰度在复杂逻辑中使用传统循环提高可维护性