字典(Dictionary)是一种键值对(key-value)类型的数据结构。它允许你通过一个唯一的键(key)来存取和管理数据。可以把它想象成一本词典,通过单词(键)来找到对应的解释(值)。
基础操作
1、dict[key] = value:插入或更新键值。
2、dict[key]:访问值(可选类型)。
3、dict.removeValue(forKey:):删除某个键。
4、dict.keys / dict.values:获取所有键或所有值。
5、dict.count / dict.isEmpty:数量与是否为空。
var dict = ["a": 1, "b": 2]
dict["c"] = 3 // 添加键值对
dict["a"] = 10 // 更新值
dict.removeValue(forKey: "b")
合并相关
1、merge(_:uniquingKeysWith:):合并另一个字典到当前字典(修改原字典)。
2、merging(_:uniquingKeysWith:):合并返回一个新字典(不会改变原字典)。
var a = ["x": 1, "y": 2]
let b = ["y": 3, "z": 4]
a.merge(b) { $1 } // a 变为 ["x": 1, "y": 3, "z": 4]
let c = a.merging(b) { $0 } // 新字典,a 不变
过滤和映射
1、filter { … }:筛选键值对。
2、map { … }:映射为新数组。
3、mapValues { … }:对所有值进行转换,返回字典。
4、compactMapValues { … }:转换并去除 nil 值,返回字典。
let dict = ["a": 1, "b": 2, "c": 3]
let even = dict.filter { $0.value % 2 == 0 } // ["b": 2]
let valueSquared = dict.mapValues { $0 * $0 } // ["a": 1, "b": 4, "c": 9]
分组
Dictionary(grouping:by:):按条件分组为字典 [Key: [Value]]。
其他方法
1、updateValue(_:forKey:):设置值并返回旧值(若有)。
2、index(forKey:):返回指定键的索引(少见)。
3、forEach:遍历字典。
4、reduce(into:):自定义聚合处理(进阶)。
实际应用
1、创建字典
// 创建一个空字典
var emptyDict: [String: Int] = [:]
// 创建一个带有初始值的字典
var personAge: [String: Int] = ["Alice": 25, "Bob": 30]
2、访问字典中的值
可以通过键来获取值:
let age = personAge["Alice"] // age is Optional(25)
// 使用默认值来避免 Optional
let age = personAge["Charlie", default: 0] // age is 0
3、更新字典中的值
// 添加或更新一个键值对
personAge["Alice"] = 26 // 更新 Alice 的年龄
personAge["Charlie"] = 22 // 添加新的键值对
// 使用 updateValue(_:forKey:) 方法
personAge.updateValue(28, forKey: "Bob") // 更新 Bob 的年龄
4、删除字典中的键值对
personAge["Alice"] = nil // 删除键为 "Alice" 的键值对
// 使用 removeValue(forKey:) 方法
personAge.removeValue(forKey: "Bob")
5、遍历字典
可以使用 for-in 循环遍历字典中的所有键值对:
for (name, age) in personAge {
print("\(name) is \(age) years old")
}
// 只遍历键
for name in personAge.keys {
print("Name: \(name)")
}
// 只遍历值
for age in personAge.values {
print("Age: \(age)")
}