查字典的时候,一个字就对应着一个释义,它们总是成对出现
- 字典
定义字典类型: Dictionary<Key, Value>
精简表达类型: [Key: Value]
-
特性:
- 1.字典是无序的集合
- 2.字典是键值对应的
- 3.字典的key 必须满足 Hashable 协议
- 4.字典必须初始化
-
初始化
-
下面 key 和 value 都是 String 类型
1.var dic1: Dictionary<String, String> = [:]
2.var dic2: [String:String] = [:]
3.var dic3 = [String: String]()
4.var dic4 = Dictionary<String, String>()
* as
5.var dic5 = ["name": 1, "age": nil] as [String: Int?]
平时使用中,可以用类型确定的字面量方法快速创建:
var dic5 = [1: "a",2: "b"] // key:Int value:String
同其它集合一样,已确定类型并初始化的字典可以通过[:] 置空
如:dic5 = [:] // 此时dic5 就是 空字典
-
增删改查
有则改之无则加勉
- 增
// LOL 2019 小组赛第一轮的胜场
var dic = ["FPX":2,"IG":2,"RNG":2,"SKT":3] as [String: Int]
字典中如果包含要修改的key,则修改对应的value,反之增加一对 key-value
dic["FPX"] = 5 // 有 -> 修改
dic["FNC"] = 0 // 无 -> 增加
print(dic) // ["SKT": 3, "IG": 2, "RNG": 2, "FNC": 0, "FPX": 5]
- 改 -> updateValue
实际上FNC 小组赛赢了一场,需要修改一下
dic.updateValue(1, forKey: "FNC")
#🐷 这里可以用一个值去接收 updateValue 的返回值
如果字典有这个key,则返回修改前的值
let oldValue = dic.updateValue(1, forKey: "FNC")
// 打印 0
反之,返回nil
let nilValue = dic.updateValue(1, forKey: "G2")
// 打印 nil
- 查 使用下标的方式(比如 defaultSettings["Name"])
#🐷 字典查找将返回的是可选值,当特定键不存在时,下标查询返回nil
这里输出 使用!强制解包,因为类型已经确认 或者 添加一个默认值
print("Rng 第一轮赢了\(dic["RNG"]!)场")
print("Rng 第一轮赢了\(dic["RNG"] ?? 3)场")
// 打印 Rng 第一轮赢了2场
- 删
1.通过下标置nil,可以移除一个键值对
dic["G2"] = nil // G2进不了淘汰赛 🤫
// 打印 ["RNG": 2, "SKT": 3, "FPX": 5, "FNC": 1, "IG": 2]
2.removeValue(forKey:)
# 类似 updateValue有返回值,key 不存在就返回nil,key存在返回被移除的值
let out1 = dic.removeValue(forKey: "FNC") // out1 = 1
// 四强还剩 ["SKT": 3, "IG": 2, "RNG": 2, "FPX": 5]
3.removeAll() 移除所有
- 判空 and 遍历
* 判空
dic.count == 0 / dic.isEmpty
* 遍历
var dic = ["FPX":"dayoinb","IG":"ts","RNG":"小🐶","SKT":"剃须刀"] as [String: String]
for (key, value) in dic {
print("\(key) 的主C 是 \(value)")
}
打印
/*
RNG 的主C 是 小🐶
IG 的主C 是 ts
FPX 的主C 是 dayoinb
SKT 的主C 是 剃须刀
*/
-
Swift 5.0 CompactMapValues
自动去nil
Swift 5.0之前 :有两个函数
-
compactMap
: 字典 -> 数组
- 核心:过滤
let dic = [
"跑步": 1,
"蛙跳": 20,
"引体向上": 2,
"跳绳": 100
]
let compact = dic.compactMap({$0.value > 10})
print(compact) // [false, true, true, false]
2.mapValues
: 字典 -> 字典
- 核心:对value 进行一个操作
经过一个星期的锻炼,各项成绩都能多做10个
let mapValues = dic.mapValues({ $0 + 10 })
// ["跑步": 11, "引体向上": 12, "蛙跳": 30, "跳绳": 110]
Swift 5.0之后
compactMap + mapValues 进化 -> CompactMapValues
- 核心: 对value 进行一个操作,并且同时过滤不符合条件的键值对
let dic = [
"跑步": 1,
"蛙跳": 20,
"游泳": nil,
"引体向上": 2,
"跳绳": 100
]
let compactMapValues = dic.compactMapValues({ $0 })
print(compactMapValues)
// ["蛙跳": 20, "跳绳": 100, "跑步": 1, "引体向上": 2]
#🐷 这里的不符合指的是 : 不符合 或者 nil
- 个人笔记
网友评论