Swift标准库中关于Array的高阶函数

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"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值