Swift集合类型完全教程:数组、Set与字典的增删改查实战(Swift编程语言中文版)
【免费下载链接】the-swift-programming-language-in-chinese中文版 Apple 官方《Swift 编程语言》项目地址: https://gitcode.com/gh_mirrors/th/the-swift-programming-language-in-chinese
在 Swift 开发中,Swift集合类型是存储和组织数据的核心工具。本教程面向新手,通过《Swift 编程语言》中文版的官方文档,带你快速掌握数组(Array)、Set(集合)与字典(Dictionary)三大集合类型的创建、增删改查与遍历实战,帮助你在实际项目中做出正确选型并写出更地道的 Swift 代码。
3大集合类型怎么选?一张表看懂
Swift 的数组、集合和字典都是类型安全的——你不能往[Int]数组里错误地塞入字符串,取出值时类型也是确定的。
| 集合类型 | 顺序 | 重复值 | 典型场景 | 类型写法 |
|---|---|---|---|---|
| 数组 Array | ✅ 有序 | ✅ 允许 | 有序列表、购物清单、记录序列 | [Element] |
| 集合 Set | ❌ 无序 | ❌ 自动去重 | 标签、去重、唯一值判断 | Set<Element> |
| 字典 Dictionary | ❌ 无序 | 键唯一 | 键值映射、配置、查找表 | [Key: Value] |
📌 一句话选型口诀:要顺序选数组,要去重选 Set,要查表选字典。
数组:有序的值列表
数组创建与初始化
数组字面量是最常用的写法——把值用逗号分隔、放进方括号即可,Swift 还能自动推断类型:
var shoppingList = ["Eggs", "Milk"]其他常见创建方式:
- 空数组:
var someInts: [Int] = [] - 重复默认值:
var threeDoubles = Array(repeating: 0.0, count: 3) - 数组合并:
var sixDoubles = threeDoubles + anotherThreeDoubles
数组的增删改查实战
以shoppingList为例,覆盖增、删、改、查四类操作:
| 操作 | 代码 | 说明 |
|---|---|---|
| 增(末尾) | shoppingList.append("Flour") | 追加一项 |
| 增(批量) | shoppingList += ["Cheese", "Butter"] | 追加整个数组 |
| 增(指定位置) | shoppingList.insert("Maple Syrup", at: 0) | 插入到索引 0 |
| 删(指定位置) | shoppingList.remove(at: 0) | 返回被删除项 |
| 删(末尾) | shoppingList.removeLast() | 更高效地删末项 |
| 改(单点) | shoppingList[0] = "Six eggs" | 下标赋值 |
| 改(范围) | shoppingList[4...6] = ["Bananas", "Apples"] | 批量替换 |
| 查 | shoppingList[0]、shoppingList.count、shoppingList.isEmpty | 下标取值 / 数量 / 判空 |
⚠️ 注意:数组从 0 开始索引,最大有效索引是count - 1,越界会触发运行时错误。
遍历数组
for (index, value) in shoppingList.enumerated() { print("Item \(index + 1): \(value)") }enumerated()会同时给出索引和值,是遍历数组最实用的写法。
Set:无序但唯一的值集合
Set 的创建与增删改查
集合存储相同类型的不同值,元素自动去重、无固定顺序。类型必须显式声明为Set(字面量无法推断出 Set 类型):
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]| 操作 | 方法 | 说明 |
|---|---|---|
| 增 | favoriteGenres.insert("Jazz") | 加入新元素 |
| 删 | favoriteGenres.remove("Rock") | 存在则删除并返回该值,否则返回nil |
| 清空 | favoriteGenres.removeAll() | 移除所有元素 |
| 查 | favoriteGenres.contains("Funk") | 判断是否包含 |
| 数量 | favoriteGenres.count/isEmpty | 元素个数 / 判空 |
💡 存入 Set 的类型必须可哈希(String、Int、Double、Bool等基本类型天然可哈希),自定义类型需遵循Hashable协议,详见 Protocols.md。
Set 的 4 大集合操作
Set 最强大的地方在于集合运算,一行代码即可完成交集、并集、差集与对称差:
let oddDigits: Set = [1, 3, 5, 7, 9] let evenDigits: Set = [0, 2, 4, 6, 8] oddDigits.union(evenDigits).sorted() // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] oddDigits.intersection(evenDigits).sorted() // [] oddDigits.subtracting(evenDigits).sorted() // [1, 3, 5, 7, 9] oddDigits.symmetricDifference(evenDigits).sorted() // 只存在于其中一方的值判断子集、超集与不相交
let houseAnimals: Set = ["🐶", "🐱"] let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"] houseAnimals.isSubset(of: farmAnimals) // true:家庭宠物都在农场里 farmAnimals.isSuperset(of: houseAnimals) // true:农场包含家庭宠物 farmAnimals.isDisjoint(with: cityAnimals) // true:两个集合没有共同值字典:键值对的高效查找表
字典的创建
字典把唯一的键关联到值,就像用单词查定义:
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]完整类型写法为Dictionary<Key, Value>,简写[Key: Value]更常用。键必须可哈希,规则与 Set 相同。
字典的增删改查实战
以机场字典为例,键值对操作比数组更直观:
| 操作 | 代码 | 说明 |
|---|---|---|
| 增/改 | airports["LHR"] = "London Heathrow" | 新键则新增,旧键则覆盖 |
| 安全更新 | airports.updateValue("Dublin Airport", forKey: "DUB") | 返回旧值,方便判断是否更新 |
| 查 | if let name = airports["DUB"] { ... } | 下标返回可选值,键不存在时为nil |
| 删 | airports["APL"] = nil | 赋nil即删除 |
| 删(方法) | airports.removeValue(forKey: "DUB") | 返回被删除的值,不存在返回nil |
| 数量 | airports.count/airports.isEmpty | 键值对个数 / 判空 |
遍历字典
for (code, name) in airports { print("\(code): \(name)") }也可以只遍历键或值:
for code in airports.keys { print(code) } for name in airports.values { print(name) }📝 字典没有固定顺序,需要排序时可用airports.keys.sorted()得到有序数组。
可变与不可变:var 与 let 的选型建议
- 集合赋给变量(
var)→ 可增删改元素; - 集合赋给常量(
let)→ 不可变,大小和内容都不能改。
官方建议:在不需要修改的场景下优先使用不可变集合,既让代码更易读,也能让 Swift 编译器更好地优化性能。
总结:集合类型学习路径
🎯 掌握本教程后,你应能完成:
- 根据"顺序 / 去重 / 查表"需求在数组、Set、字典之间快速选型;
- 熟练使用字面量创建集合,并完成append / insert / remove / 下标赋值等增删改查操作;
- 用
union、intersection、isSubset(of:)等完成Set 集合运算; - 用可选绑定安全地读取字典值,理解字典下标为何返回可选值。
想继续深入?建议按以下路径学习本中文版文档(完整源码见 CollectionTypes.md):
- 数组/集合/字典的底层原理 → Generics.md(泛型集合)
for-in循环细节 → ControlFlow.md- 下标的高级用法 → Subscripts.md
- 可哈希类型与协议 → Protocols.md
【免费下载链接】the-swift-programming-language-in-chinese中文版 Apple 官方《Swift 编程语言》项目地址: https://gitcode.com/gh_mirrors/th/the-swift-programming-language-in-chinese
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考