精辟剖析 Swift 数组的强大 API,助力开发事半功倍
2024-01-30 06:33:39
Swift 中的数组提供了一系列强大而实用的 API,这些 API 可以帮助我们轻松完成各种数据处理任务。本文将对这些 API 进行详细剖析,帮助您充分利用 Swift 数组的强大功能。
常见操作
map(映射)
map 函数用于将数组中的每个元素应用于一个闭包表达式,并返回一个包含转换后元素的新数组。
let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [2, 4, 6, 8, 10]
filter(过滤)
filter 函数用于从数组中过滤出满足某个条件的元素,并返回一个包含这些元素的新数组。
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4]
reduce(规约)
reduce 函数用于将数组中的元素逐个应用于一个闭包表达式,并返回一个最终的累积值。
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15
sorted(排序)
sorted 函数用于对数组中的元素进行排序,并返回一个排序后的新数组。
let sortedNumbers = numbers.sorted()
print(sortedNumbers) // [1, 2, 3, 4, 5]
高级操作
compactMap(紧凑映射)
compactMap 函数与 map 函数类似,但它会过滤掉转换后为 nil 的元素。
let strings = ["1", "2", "a", "4", "5"]
let numbers = strings.compactMap { Int($0) }
print(numbers) // [1, 2, 4, 5]
flatMap(扁平映射)
flatMap 函数用于将数组中的每个元素应用于一个闭包表达式,并返回一个包含转换后所有元素的新数组。
let arrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let flattenedArray = arrays.flatMap { $0 }
print(flattenedArray) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
min(最小值)和 max(最大值)
min 和 max 函数用于返回数组中的最小值和最大值。
let minValue = numbers.min()
print(minValue) // 1
let maxValue = numbers.max()
print(maxValue) // 5
shuffle(随机洗牌)
shuffle 函数用于对数组中的元素进行随机洗牌,并返回一个洗牌后的新数组。
let shuffledNumbers = numbers.shuffled()
print(shuffledNumbers) // [3, 5, 2, 4, 1]
reversed(反转)
reversed 函数用于反转数组中的元素顺序,并返回一个反转后的新数组。
let reversedNumbers = numbers.reversed()
print(reversedNumbers) // [5, 4, 3, 2, 1]
其他实用 API
enumerated(带索引枚举)
enumerated 函数用于返回数组中元素及其索引的元组数组。
for (index, number) in numbers.enumerated() {
print("\(index): \(number)")
}
// 输出:
// 0: 1
// 1: 2
// 2: 3
// 3: 4
// 4: 5
first 和 last(首尾元素)
first 和 last 属性用于返回数组中的第一个元素和最后一个元素。
let firstNumber = numbers.first
print(firstNumber) // 1
let lastNumber = numbers.last
print(lastNumber) // 5
index 和 indices(索引)
index 和 indices 属性用于返回数组中特定元素的索引和所有元素的索引范围。
let index = numbers.index(of: 3)
print(index) // 2
let indices = numbers.indices
print(indices) // 0...4
count 和 isEmpty(数量和空数组判断)
count 属性用于返回数组中的元素数量,isEmpty 属性用于判断数组是否为空。
let count = numbers.count
print(count) // 5
let isEmpty = numbers.isEmpty
print(isEmpty) // false
contains(包含判断)
contains 函数用于判断数组中是否包含某个元素。
let containsThree = numbers.contains(3)
print(containsThree) // true
append、remove、insert、removeFirst、removeLast、replace(增删改)
append、remove、insert、removeFirst、removeLast 和 replace 函数用于对数组进行增删改操作。
// 追加元素
numbers.append(6)
print(numbers) // [1, 2, 3, 4, 5, 6]
// 删除元素
numbers.remove(at: 2)
print(numbers) // [1, 2, 4, 5, 6]
// 插入元素
numbers.insert(3, at: 2)
print(numbers) // [1, 2, 3, 4, 5, 6]
// 删除第一个元素
numbers.removeFirst()
print(numbers) // [2, 3, 4, 5, 6]
// 删除最后一个元素
numbers.removeLast()
print(numbers) // [2, 3, 4, 5]
// 替换元素
numbers[2] = 6
print(numbers) // [2, 3, 6, 5]
sort、reverse、fill、stride、partition(排序、反转、填充、跨步、分区)
sort、reverse、fill、stride 和 partition 函数用于对数组进行排序、反转、填充、跨步和分区操作。
// 排序
numbers.sort()
print(numbers) // [2, 3, 4, 5, 6]
// 反转
numbers.reverse()
print(numbers) // [6, 5, 4, 3, 2]
// 填充
numbers.fill(with: 0)
print(numbers) // [0, 0, 0, 0, 0]
// 跨步
let strideNumbers = numbers.stride(from: 0, to: 5, by: 2)
print(strideNumbers) // [0, 2, 4]
// 分区
let partitionNumbers = numbers.partition(by: { $0 % 2 == 0 })
print(partitionNumbers) // (index: 2, elements: [0, 2, 4], [1, 3])
Swift 数组的这些高级 API 非常强大且易于使用,可以帮助我们轻松完成各种数据处理任务。通过熟练掌握这些 API,我们可以显著提高代码的可读性和简洁性,并编写出更高质量的代码。