美文网首页
从 Dictionary 到 Swift

从 Dictionary 到 Swift

作者: overla5 | 来源:发表于2019-10-16 15:34 被阅读0次

查字典的时候,一个字就对应着一个释义,它们总是成对出现

  • 字典
定义字典类型:  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之前 :有两个函数

  1. 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

  • 个人笔记

相关文章

网友评论

      本文标题:从 Dictionary 到 Swift

      本文链接:https://www.haomeiwen.com/subject/shuymctx.html