返回

精辟剖析 Swift 数组的强大 API,助力开发事半功倍

IOS

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,我们可以显著提高代码的可读性和简洁性,并编写出更高质量的代码。