简介
Swift 中提供了丰富的高阶函数,用于数组、字典、集合等集合类型的操作。高阶函数是可以接受函数作为参数或返回一个函数的函数,常用于简化代码和增强可读性。主要有:map, filter, reduce, flatMap,compatMap,forEach,sorted, allSatisfy, first(where:),contains(where:),dropFirst/dropLast,prefix/suffix, zip
map
用于将集合中的每个元素通过闭包映射为一个新元素,并返回一个包含新元素的集合。
let numbers = [1, 2, 3, 4]
let squares = numbers.map { $0 * $0 }
print(squares) // 输出 [1, 4, 9, 16]
compatMap
用于对集合中的每个元素 进行某种转换,并且会自动过滤掉结果中的 nil 值。返回新数组
let numbers = ["1", "2", "three", "4"]
let validNumbers = numbers.compactMap { Int($0) }
print(validNumbers) // 输出 [1, 2, 4]
let arr = [1, 23, "three", "444"]
let res = arr.compactMap { $0 as? String }
// 输出 ["three", "444"]
flatMap
类似于 map,但会将嵌套的集合打平,避免出现多重数组。
let array = [[1, 2], [3, 4], [5]]
let flatArray = array.flatMap { $0 }
print(flatArray) // 输出 [1, 2, 3, 4, 5]
filter
用于筛选出满足条件的元素,返回包含满足条件的元素的集合。
let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // 输出 [2, 4]
reduce
用于将集合中的所有元素按照某种规则进行聚合,最终返回一个值。
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 输出 15
其中,0 是初始值,1 是当前元素。
forEach
遍历集合中的每个元素,但不同于 for-in 循环,它不能使用 break 或 continue。
let numbers = [1, 2, 3]
numbers.forEach { print($0) }
// 输出 1 2 3
sorted
用于对集合进行排序,可以根据自定义规则排序。
let numbers = [3, 1, 4, 1, 5]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers) // 输出 [1, 1, 3, 4, 5]
first(where:)
返回第一个满足条件的元素,若没有则返回 nil
let numbers = [1, 2, 3, 4, 5]
let firstEven = numbers.first(where: { $0 == 5 })
print(firstEven) // 输出 5
contains(where:)
用于判断集合中是否 有 元素满足条件,返回布尔值。
let numbers = [1, 3, 5, 7]
let containsEven = numbers.contains { $0 % 2 == 0 }
print(containsEven) // 输出 false
allSatisfy
用于检查集合中的 所有 元素是否满足指定条件
let numbers = [2, 4, 6]
let allEven = numbers.allSatisfy { $0 % 2 == 0 }
print(allEven) // 输出 true
dropFirst/dropLast
用于去除集合的第一个或最后一个元素,返回剩余部分。
let numbers = [1, 2, 3, 4, 5]
let withoutFirst = numbers.dropFirst()
print(withoutFirst) // 输出 [2, 3, 4, 5]
prefix/suffix
用于获取集合的前几个或后几个元素。