// 创建数组
var numbers = [1, 2, 3, 4, 5]
var emptyArray: [Int] = []
var initializedArray = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]
// 基本操作
numbers.append(6) // 添加元素:[1, 2, 3, 4, 5, 6]
numbers.insert(0, at: 0) // 插入元素:[0, 1, 2, 3, 4, 5, 6]
let removed = numbers.remove(at: 0) // 删除并返回:[1, 2, 3, 4, 5, 6], removed = 0
let last = numbers.removeLast() // 删除最后一个:[1, 2, 3, 4, 5], last = 6
// 查询
let count = numbers.count // 元素个数:5
let isEmpty = numbers.isEmpty // 是否为空:false
let first = numbers.first // 第一个元素:Optional(1)
let lastElement = numbers.last // 最后一个:Optional(5)
let contains = numbers.contains(3) // 是否包含:true
let index = numbers.firstIndex(of: 3) // 元素索引:Optional(2)
// 遍历
for number in numbers {
print(number) // 1, 2, 3, 4, 5
}
for (index, number) in numbers.enumerated() {
print("\(index): \(number)") // 0: 1, 1: 2, 2: 3...
}
// 高阶函数(非常常用!)
let doubled = numbers.map { $0 * 2 } // [2, 4, 6, 8, 10]
let filtered = numbers.filter { $0 > 2 } // [3, 4, 5]
let sum = numbers.reduce(0) { $0 + $1 } // 15
let hasEven = numbers.contains { $0 % 2 == 0 } // true
// 排序
let sorted = numbers.sorted() // 升序
let sortedDesc = numbers.sorted(by: >) // 降序
numbers.sort() // 原地排序
numbers.sort(by: >) // 原地降序排序
// 切片
let slice = numbers[1...3] // [2, 3, 4] (ArraySlice类型)
let prefix = numbers.prefix(3) // 前3个:[1, 2, 3]
let suffix = numbers.suffix(2) // 后2个:[4, 5]
// 其他实用方法
numbers.shuffle() // 随机打乱
let shuffled = numbers.shuffled() // 返回打乱的新数组
numbers.reverse() // 原地反转
let reversed = numbers.reversed() // 返回反转的序列
numbers.removeAll() // 清空数组
numbers.removeAll(where: { $0 > 3 }) // 删除所有大于3的元素
字典常用方法
Swift复制代码
// 创建字典
var scores = ["Alice": 95, "Bob": 80, "Charlie": 90]
var emptyDict: [String: Int] = [:]
var initializedDict = Dictionary(uniqueKeysWithValues: [("a", 1), ("b", 2)])
// 基本操作
scores["David"] = 85 // 添加或更新
let score = scores["Alice"] // 获取值:Optional(95)
scores["Alice"] = nil // 删除键值对
let removedValue = scores.removeValue(forKey: "Bob") // 删除并返回值
// 查询
let count = scores.count // 键值对数量
let isEmpty = scores.isEmpty // 是否为空
let keys = scores.keys // 所有键
let values = scores.values // 所有值
let contains = scores.keys.contains("Alice") // 是否包含键
// 遍历
for (name, score) in scores {
print("\(name): \(score)")
}
for name in scores.keys {
print(name)
}
for score in scores.values {
print(score)
}
// 转换
let names = Array(scores.keys) // 键数组
let allScores = Array(scores.values) // 值数组
// 更新值
scores.updateValue(100, forKey: "Alice") // 更新,返回旧值
scores["Bob", default: 0] += 10 // 安全地增加值
// 合并字典
let newScores = ["Eve": 88, "Frank": 92]
scores.merge(newScores) { current, new in new } // 合并,冲突时用新的
let merged = scores.merging(newScores) { $1 } // 返回新字典
// 分组
let students = ["Alice", "Bob", "Charlie", "David"]
let grouped = Dictionary(grouping: students) { $0.first! } // 按首字母分组
// 过滤
let highScores = scores.filter { $0.value > 85 } // 筛选高分
集合常用方法
Swift复制代码
// 创建集合
var fruits: Set = ["apple", "banana", "orange"]
var numbers: Set<Int> = [1, 2, 3, 4, 5]
var emptySet: Set<String> = []
// 基本操作
fruits.insert("grape") // 添加元素
let removed = fruits.remove("apple") // 删除元素,返回删除的值
fruits.removeFirst() // 删除第一个元素
fruits.removeAll() // 清空集合
// 查询
let count = fruits.count // 元素个数
let isEmpty = fruits.isEmpty // 是否为空
let contains = fruits.contains("banana") // 是否包含
// 集合操作
let setA: Set = [1, 2, 3, 4]
let setB: Set = [3, 4, 5, 6]
let union = setA.union(setB) // 并集:[1, 2, 3, 4, 5, 6]
let intersection = setA.intersection(setB)// 交集:[3, 4]
let subtracting = setA.subtracting(setB) // 差集:[1, 2]
let symmetricDiff = setA.symmetricDifference(setB) // 对称差:[1, 2, 5, 6]
// 集合关系
let isSubset = setA.isSubset(of: setB) // 是否是子集:false
let isSuperset = setA.isSuperset(of: setB)// 是否是超集:false
let isDisjoint = setA.isDisjoint(with: setB) // 是否没有交集:false
let isStrictSubset = setA.isStrictSubset(of: setB) // 真子集
let isStrictSuperset = setA.isStrictSuperset(of: setB) // 真超集
// 遍历
for fruit in fruits {
print(fruit)
}
for fruit in fruits.sorted() { // 排序遍历
print(fruit)
}
// 高阶函数
let uppercased = fruits.map { $0.uppercased() } // 映射
let longFruits = fruits.filter { $0.count > 5 } // 过滤
let totalLength = fruits.reduce(0) { $0 + $1.count } // 归约
// 转换
let arrayFromSet = Array(fruits) // 转为数组
let setFromArray = Set([1, 2, 2, 3, 3]) // 转为集合:[1, 2, 3](去重)
元组常用方法
Swift复制代码
// 创建元组
let person = (name: "Alice", age: 30, isStudent: false) // 命名元组
let coordinates = (40.7128, -74.0060) // 未命名元组
var mutableTuple = ("John", 25) // 可变元组
// 访问元素
let name = person.name // 通过名称访问:"Alice"
let age = person.1 // 通过索引访问:30
let (x, y) = coordinates // 解构赋值
let (firstName, _, _) = person // 部分解构
// 修改元组(必须是 var)
mutableTuple.0 = "Mike" // 通过索引修改
// person.name = "Bob" // ❌ 错误,let 常量不可改
// 类型别名
typealias Point = (x: Double, y: Double)
let origin: Point = (0, 0)
// 作为函数返回值
func getMinMax(numbers: [Int]) -> (min: Int, max: Int)? {
guard let min = numbers.min(), let max = numbers.max() else {
return nil
}
return (min, max)
}
if let bounds = getMinMax(numbers: [5, 3, 8, 1]) {
print("Min: \(bounds.min), Max: \(bounds.max)") // Min: 1, Max: 8
}
// 比较(只能比较最多6个元素的元组)
let tuple1 = (1, "apple")
let tuple2 = (2, "banana")
let tuple3 = (1, "apple")
tuple1 == tuple3 // true
tuple1 < tuple2 // true(按顺序比较元素)
// 遍历(需要转为数组或使用反射)
let values = Mirror(reflecting: person).children
for (label, value) in values {
print("\(label ?? ""): \(value)")
}
// 实用技巧:交换值
var a = 5, b = 10
(a, b) = (b, a) // 交换:a=10, b=5
// 多个返回值
func calculateStatistics(scores: [Int]) -> (sum: Int, avg: Double, count: Int) {
let sum = scores.reduce(0, +)
let avg = Double(sum) / Double(scores.count)
return (sum, avg, scores.count)
}
let stats = calculateStatistics(scores: [85, 90, 78, 92])
print("Sum: \(stats.sum), Average: \(stats.avg), Count: \(stats.count)")
常用模式总结
1. 安全的集合操作
Swift复制代码
// 安全地获取和修改
if let score = scores["Alice"] {
// 处理分数
}
// 使用 default 值
let score = scores["Bob", default: 0]
// 安全的数组访问
if numbers.indices.contains(10) {
let value = numbers[10]
}
// 使用 first 和 last(返回可选值)
if let first = numbers.first {
// 处理第一个元素
}