数组 #
一、数组概述 #
数组是Swift中最常用的集合类型,用于存储有序的相同类型元素。
1.1 数组特点 #
- 有序集合
- 元素类型相同
- 支持索引访问
- 值类型(复制时创建副本)
二、创建数组 #
2.1 空数组 #
swift
var emptyArray: [Int] = []
var emptyArray2 = [Int]()
var emptyArray3 = Array<Int>()
print(emptyArray.isEmpty)
2.2 带初始值 #
swift
let numbers = [1, 2, 3, 4, 5]
let strings = ["A", "B", "C"]
let doubles: [Double] = [1.0, 2.0, 3.0]
print(numbers)
print(strings)
print(doubles)
2.3 重复值初始化 #
swift
let zeros = Array(repeating: 0, count: 5)
let hellos = Array(repeating: "Hello", count: 3)
print(zeros)
print(hellos)
2.4 数组字面量 #
swift
let fruits: [String] = ["苹果", "香蕉", "橙子"]
let mixed: [Any] = [1, "Hello", 3.14, true]
print(fruits)
print(mixed)
三、访问元素 #
3.1 通过索引访问 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
print(fruits[0])
print(fruits[1])
print(fruits[2])
3.2 安全访问 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
if let first = fruits.first {
print(first)
}
if let last = fruits.last {
print(last)
}
let index = 5
if index < fruits.count {
print(fruits[index])
}
3.3 获取子数组 #
swift
let numbers = [1, 2, 3, 4, 5]
let firstThree = numbers[0..<3]
let lastTwo = numbers[3...]
let middle = numbers[1...3]
print(firstThree)
print(lastTwo)
print(middle)
3.4 数组属性 #
swift
let numbers = [1, 2, 3, 4, 5]
print(numbers.count)
print(numbers.isEmpty)
print(numbers.first!)
print(numbers.last!)
四、修改数组 #
4.1 添加元素 #
swift
var fruits = ["苹果", "香蕉"]
fruits.append("橙子")
print(fruits)
fruits += ["葡萄", "西瓜"]
print(fruits)
fruits.insert("草莓", at: 1)
print(fruits)
4.2 删除元素 #
swift
var fruits = ["苹果", "香蕉", "橙子", "葡萄"]
let removed = fruits.remove(at: 1)
print(removed)
print(fruits)
let lastRemoved = fruits.removeLast()
print(lastRemoved)
print(fruits)
let firstRemoved = fruits.removeFirst()
print(firstRemoved)
print(fruits)
fruits.removeAll()
print(fruits)
4.3 修改元素 #
swift
var fruits = ["苹果", "香蕉", "橙子"]
fruits[0] = "红苹果"
print(fruits)
fruits[1...2] = ["黄香蕉", "甜橙子"]
print(fruits)
4.4 替换元素 #
swift
var fruits = ["苹果", "香蕉", "橙子"]
fruits.replaceSubrange(0...1, with: ["草莓", "蓝莓"])
print(fruits)
五、遍历数组 #
5.1 for-in遍历 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits {
print(fruit)
}
5.2 带索引遍历 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
for (index, fruit) in fruits.enumerated() {
print("\(index): \(fruit)")
}
5.3 反向遍历 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits.reversed() {
print(fruit)
}
5.4 while遍历 #
swift
let fruits = ["苹果", "香蕉", "橙子"]
var index = 0
while index < fruits.count {
print(fruits[index])
index += 1
}
六、数组操作 #
6.1 查找元素 #
swift
let numbers = [1, 2, 3, 4, 5, 3]
print(numbers.contains(3))
print(numbers.firstIndex(of: 3) ?? -1)
print(numbers.lastIndex(of: 3) ?? -1)
let firstEven = numbers.first { $0 % 2 == 0 }
print(firstEven ?? 0)
6.2 过滤 #
swift
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)
let greaterThanFive = numbers.filter { $0 > 5 }
print(greaterThanFive)
6.3 映射 #
swift
let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
print(doubled)
let strings = numbers.map { "数字\($0)" }
print(strings)
6.4 归约 #
swift
let numbers = [1, 2, 3, 4, 5]
let sum = numbers.reduce(0, +)
print(sum)
let product = numbers.reduce(1, *)
print(product)
let concatenated = numbers.reduce("") { $0 + "\($1)" }
print(concatenated)
6.5 排序 #
swift
var numbers = [3, 1, 4, 1, 5, 9, 2, 6]
let sorted = numbers.sorted()
print(sorted)
let descending = numbers.sorted { $0 > $1 }
print(descending)
numbers.sort()
print(numbers)
七、数组比较 #
7.1 相等比较 #
swift
let a = [1, 2, 3]
let b = [1, 2, 3]
let c = [3, 2, 1]
print(a == b)
print(a == c)
7.2 查找差异 #
swift
let a = [1, 2, 3, 4]
let b = [3, 4, 5, 6]
let onlyInA = a.filter { !b.contains($0) }
let onlyInB = b.filter { !a.contains($0) }
let inBoth = a.filter { b.contains($0) }
print("只在A中: \(onlyInA)")
print("只在B中: \(onlyInB)")
print("在两者中: \(inBoth)")
八、多维数组 #
8.1 二维数组 #
swift
var matrix: [[Int]] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[0][0])
print(matrix[1][2])
matrix[0][0] = 10
print(matrix)
8.2 初始化二维数组 #
swift
let rows = 3
let cols = 4
var grid = Array(repeating: Array(repeating: 0, count: cols), count: rows)
print(grid)
grid[1][2] = 5
print(grid)
8.3 遍历二维数组 #
swift
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix {
for element in row {
print(element, terminator: " ")
}
print()
}
九、实际应用 #
9.1 数组去重 #
swift
let numbers = [1, 2, 2, 3, 3, 3, 4, 4, 5]
let unique = Array(Set(numbers))
print(unique)
let orderedUnique = numbers.reduce(into: [Int]()) { result, value in
if !result.contains(value) {
result.append(value)
}
}
print(orderedUnique)
9.2 数组分块 #
swift
extension Array {
func chunked(into size: Int) -> [[Element]] {
guard size > 0 else { return [] }
return stride(from: 0, to: count, by: size).map {
Array(self[$0..<Swift.min($0 + size, count)])
}
}
}
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let chunks = numbers.chunked(into: 3)
print(chunks)
9.3 数组扁平化 #
swift
let nested = [[1, 2], [3, 4], [5, 6]]
let flattened = nested.flatMap { $0 }
print(flattened)
let optionalNumbers: [Int?] = [1, nil, 3, nil, 5]
let compacted = optionalNumbers.compactMap { $0 }
print(compacted)
9.4 数组分组 #
swift
let students = [
("张三", 85),
("李四", 90),
("王五", 75),
("赵六", 85)
]
let grouped = Dictionary(grouping: students) { $0.1 }
for (score, students) in grouped {
print("\(score)分: \(students.map { $0.0 })")
}
十、总结 #
本章学习了Swift数组:
- 创建:字面量、初始化器
- 访问:索引、first/last
- 修改:append、insert、remove
- 操作:filter、map、reduce、sorted
最佳实践:
- 使用高阶函数简化代码
- 注意索引越界问题
- 合理使用compactMap和flatMap
- 使用扩展添加实用方法
下一章,我们将学习字典!
最后更新:2026-03-26