Collection | Apple Developer Documentation
以下是 Swift 中Array及相关类型的核心函数式方法整理,涵盖功能说明与代码示例:
1. map
功能:对数组中的每个元素应用转换闭包,返回包含转换后元素的新数组。
示例:
let numbers = [1, 2, 3, 4]
// 将每个元素转换为其平方值
let squared = numbers.map { $0 * $0 }
print(squared) // 输出: [1, 4, 9, 16]
// 字符串转换
let names = ["Alice", "Bob"]
let uppercased = names.map { $0.uppercased() }
print(uppercased) // 输出: ["ALICE", "BOB"]
2. filter
功能:根据条件筛选元素,返回包含所有满足条件元素的新数组。
示例:
let numbers = [1, 2, 3, 4, 5, 6]
// 筛选偶数
let evens = numbers.filter { $0 % 2 == 0 }
print(evens) // 输出: [2, 4, 6]
// 筛选长度大于3的字符串
let words = ["cat", "dog", "elephant", "bird"]
let longWords = words.filter { $0.count > 3 }
print(longWords) // 输出: ["elephant", "bird"]
3. flatMap
功能:对每个元素应用转换(转换结果为序列),并将所有序列扁平化为单一数组。
示例:
let nestedNumbers = [[1, 2], [3, 4], [5, 6]]
// 扁平化嵌套数组
let flattened = nestedNumbers.flatMap { $0 }
print(flattened) // 输出: [1, 2, 3, 4, 5, 6]
// 转换后扁平化
let sentences = ["Hello world", "Swift is fun"]
let words = sentences.flatMap { $0.components(separatedBy: " ") }
print(words) // 输出: ["Hello", "world", "Swift", "is", "fun"]
4. compactMap
功能:对每个元素应用转换(转换结果为可选值),过滤掉nil,返回非nil元素的数组。
示例:
let stringNumbers = ["1", "2", "three", "4"]
// 将字符串转换为Int,过滤无效值
let numbers = stringNumbers.compactMap { Int($0) }
print(numbers) // 输出: [1, 2, 4]
5. reduce
功能:通过累积操作将数组元素合并为单一值(如求和、拼接字符串等)。
示例:
let numbers = [1, 2, 3, 4]
// 求和(初始值为0,累积闭包为加法)
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 输出: 10
// 拼接字符串
let letters = ["a", "b", "c"]
let combined = letters.reduce("") { $0 + $1 }
print(combined) // 输出: "abc"
6. reduce(into:)
功能:高效的累积操作,使用可变结果(如数组、字典),性能优于reduce。
示例:
let numbers = [1, 2, 3, 4, 5]
// 按奇偶分类
let grouped = numbers.reduce(into: [String: [Int]]()) { result, num in
let key = num % 2 == 0 ? "even" : "odd"
result[key, default: []].append(num)
}
print(grouped) // 输出: ["odd": [1, 3, 5], "even": [2, 4]]
7. sorted 与 sorted(by:)
功能:
sorted():返回自然排序(元素需遵循Comparable)的新数组。sorted(by:):使用自定义比较闭包排序。
示例:
let numbers = [3, 1, 4, 2]
// 自然升序排序
let ascending = numbers.sorted()
print(ascending) // 输出: [1, 2, 3, 4]
// 自定义降序排序
let descending = numbers.sorted { $0 > $1 }
print(descending) // 输出: [4, 3, 2, 1]
8. forEach
功能:遍历每个元素并执行闭包操作(无返回值,类似for-in但不可用break/continue)。
示例:
let fruits = ["apple", "banana", "cherry"]
// 打印每个元素
fruits.forEach { print("Fruit: \($0)") }
// 输出:
// Fruit: apple
// Fruit: banana
// Fruit: cherry
9. first(where:) 与 last(where:)
功能:
first(where:):返回第一个满足条件的元素(nil如果无)。last(where:):返回最后一个满足条件的元素(nil如果无)。
示例:
let numbers = [5, 2, 7, 2, 9]
// 第一个偶数
let firstEven = numbers.first(where: { $0 % 2 == 0 })
print(firstEven) // 输出: Optional(2)
// 最后一个大于5的数
let lastLarge = numbers.last(where: { $0 > 5 })
print(lastLarge) // 输出: Optional(9)
10. contains(where:)
功能:检查数组中是否存在满足条件的元素,返回Bool。
示例:
let ages = [12, 18, 25, 30]
// 是否有未成年人(<18)
let hasMinor = ages.contains { $0 < 18 }
print(hasMinor) // 输出: true
11. allSatisfy
功能:检查所有元素是否都满足条件,返回Bool(空数组返回true)。
示例:
let scores = [85, 90, 95, 88]
// 是否所有分数都及格(≥60)
let allPassed = scores.allSatisfy { $0 >= 60 }
print(allPassed) // 输出: true
12. count(where:)
功能:计算满足条件的元素数量。
示例:
let numbers = [1, 3, 5, 7, 9, 2, 4]
// 奇数的数量
let oddCount = numbers.count { $0 % 2 != 0 }
print(oddCount) // 输出: 5
13. shuffled
功能:返回随机打乱顺序的新数组。
示例:
let numbers = [1, 2, 3, 4, 5]
let shuffled = numbers.shuffled()
print(shuffled) // 输出: 随机顺序,如 [3, 1, 5, 2, 4]
14. reversed
功能:返回元素反转顺序的视图(非新数组,高效)。
示例:
let numbers = [1, 2, 3]
let reversedView = numbers.reversed()
print(Array(reversedView)) // 输出: [3, 2, 1]
15. prefix 与 suffix
功能:
prefix(k):返回前k个元素的子序列(不足则返回全部)。suffix(k):返回后k个元素的子序列(不足则返回全部)。
示例:
let numbers = [1, 2, 3, 4, 5]
// 前3个元素
let firstThree = numbers.prefix(3)
print(Array(firstThree)) // 输出: [1, 2, 3]
// 后2个元素
let lastTwo = numbers.suffix(2)
print(Array(lastTwo)) // 输出: [4, 5]
16. dropFirst 与 dropLast
功能:
dropFirst(k):返回删除前k个元素的子序列。dropLast(k):返回删除后k个元素的子序列。
示例:
let numbers = [1, 2, 3, 4, 5]
// 删除前2个
let afterTwo = numbers.dropFirst(2)
print(Array(afterTwo)) // 输出: [3, 4, 5]
// 删除后2个
let beforeLastTwo = numbers.dropLast(2)
print(Array(beforeLastTwo)) // 输出: [1, 2, 3]
17. drop(while:)
功能:删除满足条件的前缀元素,返回剩余元素的子序列(一旦不满足则停止删除)。
示例:
let numbers = [2, 4, 6, 7, 8]
// 删除前缀偶数,直到遇到奇数
let afterEvens = numbers.drop { $0 % 2 == 0 }
print(Array(afterEvens)) // 输出: [7, 8]
18. split
功能:根据条件拆分数组为多个子序列(默认过滤空序列)。
示例:
let sentence = "Swift is fun, really fun"
// 按空格拆分
let words = sentence.split { $0 == " " }
print(words.map(String.init)) // 输出: ["Swift", "is", "fun,", "really", "fun"]
// 限制最大拆分次数为2
let parts = sentence.split(whereSeparator: { $0 == " " }, maxSplits: 2)
print(parts.map(String.init)) // 输出: ["Swift", "is", "fun, really fun"]


2297

被折叠的 条评论
为什么被折叠?



