Swift高阶函数-contains、allSatisfy、reversed、lexicographicallyPrecedes
以下是 Swift 中 contains
、allSatisfy
、reversed
和 lexicographicallyPrecedes
四个高阶函数的详细说明,包含定义、语法、示例和注意事项:
1. contains
作用:检查序列中是否包含某个元素,或是否至少有一个元素满足条件。
语法:
// 检查元素是否存在
func contains(_ element: Element) -> Bool// 检查是否满足条件
func contains(where predicate: (Element) throws -> Bool) rethrows -> Bool
示例:
let numbers = [1, 2, 3, 4, 5]// 检查是否存在元素 3
print(numbers.contains(3)) // 输出: true// 检查是否有偶数
print(numbers.contains { $0 % 2 == 0 }) // 输出: true
注意事项:
- 对集合类型(如
Set
)效率更高(O(1)),但对数组(Array
)是 O(n)。
2. allSatisfy
作用:检查序列中所有元素是否都满足指定条件。
语法:
func allSatisfy(_ predicate: (Element) throws -> Bool) rethrows -> Bool
示例:
let numbers = [2, 4, 6, 8]// 检查是否所有元素都是偶数
print(numbers.allSatisfy { $0 % 2 == 0 }) // 输出: true// 检查是否所有元素大于 0
print(numbers.allSatisfy { $0 > 0 }) // 输出: true
注意事项:
- 空序列调用
allSatisfy
会返回true
(逻辑上“所有元素满足条件”在无元素时成立)。
3. reversed
作用:返回序列元素的逆序视图(不修改原序列)。
语法:
func reversed() -> ReversedCollection<Self>
示例:
let numbers = [1, 2, 3]
let reversedNumbers = numbers.reversed()print(Array(reversedNumbers)) // 输出: [3, 2, 1]// 字符串字符逆序
let word = "hello"
let reversedWord = word.reversed()
print(String(reversedWord)) // 输出: "olleh"
注意事项:
- 返回类型是
ReversedCollection
,若需数组需显式转换(如Array(reversed())
)。
4. lexicographicallyPrecedes
作用:按字典序比较两个序列,判断当前序列是否在另一个序列之前。
语法:
func lexicographicallyPrecedes<OtherSequence>(_ other: OtherSequence
) -> Bool where OtherSequence: Sequence, Self.Element == OtherSequence.Element
示例:
let a = [1, 2, 3]
let b = [1, 2, 4]print(a.lexicographicallyPrecedes(b)) // 输出: true(因为 3 < 4)// 字符串比较
let str1 = "apple"
let str2 = "banana"
print(str1.lexicographicallyPrecedes(str2)) // 输出: true(按字母顺序)
注意事项:
- 比较规则:逐个元素比较,直到找到不同元素或一个序列结束。
- 若一个序列是另一个的前缀,则较短的序列更小(如
[1,2]
<[1,2,3]
)。
总结对比
函数 | 返回值 | 核心功能 | 时间复杂度 |
---|---|---|---|
contains | Bool | 是否存在元素或满足条件的元素 | O(n) |
allSatisfy | Bool | 所有元素是否满足条件 | O(n) |
reversed | View | 返回逆序视图 | O(1)(视图生成) |
lexicographicallyPrecedes | Bool | 字典序比较 | O(n) |
根据需求选择合适的高阶函数,可以显著提升代码简洁性和可读性。