Swift集合类型完全教程:数组、Set与字典的增删改查实战(Swift编程语言中文版)
2026/9/20 14:18:07 网站建设 项目流程

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.countshoppingList.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 的类型必须可哈希StringIntDoubleBool等基本类型天然可哈希),自定义类型需遵循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"] = nilnil即删除
删(方法)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 编译器更好地优化性能。

总结:集合类型学习路径

🎯 掌握本教程后,你应能完成:

  1. 根据"顺序 / 去重 / 查表"需求在数组、Set、字典之间快速选型;
  2. 熟练使用字面量创建集合,并完成append / insert / remove / 下标赋值等增删改查操作;
  3. unionintersectionisSubset(of:)等完成Set 集合运算
  4. 用可选绑定安全地读取字典值,理解字典下标为何返回可选值

想继续深入?建议按以下路径学习本中文版文档(完整源码见 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询