Swift常用的高阶函数
Swift常用的高阶函数

Swift常用的高阶函数

Swift 提供了许多高阶函数(Higher-Order Functions),这些函数可以作为参数接收其他函数或返回函数。高阶函数在数组、集合、字典等序列类型中非常常见,主要用于对集合进行过滤、映射、转换和操作。

常见的高阶函数

1、map

将集合中的每个元素应用一个闭包,返回变换后的新集合。

let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8, 10]

2、compactMap

类似 map,但会移除 nil 值。

let strings = ["1", "2", "three", "4"]
let integers = strings.compactMap { Int($0) }
print(integers) // [1, 2, 4]

3、flatMap

将嵌套集合“展平”,或移除嵌套中的 nil。

let nestedArray = [[1, 2], [3, 4], [5]]
let flattenedArray = nestedArray.flatMap { $0 }
print(flattenedArray) // [1, 2, 3, 4, 5]

4、filter

筛选集合中的元素,保留满足条件的元素。

let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]

5、reduce

通过闭包将集合中的元素合并成单一值。

let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15

初始值 0 是累加器的起始值。

6、forEach

类似于 for-in 循环,用于遍历集合的每个元素。

let names = ["Alice", "Bob", "Charlie"]
names.forEach { print($0) }
// 输出:Alice, Bob, Charlie

7、sorted / sorted(by:)

对集合进行排序,默认为升序。

let numbers = [5, 3, 2, 1, 4]
let sortedNumbers = numbers.sorted()
print(sortedNumbers) // [1, 2, 3, 4, 5]

let descending = numbers.sorted(by: >)
print(descending) // [5, 4, 3, 2, 1]

8、contains

判断集合中是否包含满足条件的元素。

let names = ["Alice", "Bob", "Charlie"]
let hasAlice = names.contains { $0 == "Alice" }
print(hasAlice) // true

9、allSatisfy

判断集合中的所有元素是否满足指定条件。

let numbers = [2, 4, 6, 8]
let allEven = numbers.allSatisfy { $0 % 2 == 0 }
print(allEven) // true

10、first(where:)

返回集合中第一个满足条件的元素。

let numbers = [1, 3, 5, 6, 7]
if let firstEven = numbers.first(where: { $0 % 2 == 0 }) {
    print(firstEven) // 6
}

11、dropFirst / dropLast

丢弃集合中的前几个或后几个元素,返回剩余部分。

let numbers = [1, 2, 3, 4, 5]
let dropped = numbers.dropFirst(2)
print(dropped) // [3, 4, 5]

12、prefix / suffix

获取集合的前几个或后几个元素。

let numbers = [1, 2, 3, 4, 5]
let firstThree = numbers.prefix(3)
print(firstThree) // [1, 2, 3]

prefix获取前面的几个元素,suffix获取后面的几个元素。

适用于字典的高阶函数

1、compactMapValues

对字典的值进行转换,移除 nil。

let dict = ["a": "1", "b": "2", "c": "three"]
let validDict = dict.compactMapValues { Int($0) }
print(validDict) // ["a": 1, "b": 2]

其他有用的高阶函数

1、zip

将两个集合合并为一个元组集合。

let names = ["Alice", "Bob", "Charlie"]
let scores = [90, 85, 88]
let zipped = zip(names, scores)
print(Array(zipped)) // [("Alice", 90), ("Bob", 85), ("Charlie", 88)]

总结

Swift 的高阶函数提供了强大的功能,以声明式风格对集合、字典和其他数据结构进行操作。熟悉这些高阶函数,可以显著提高代码的可读性和简洁性。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注