Swift基础入门知识学习(7)-字典-讲给你懂

Swift基础入门知识学习(6)-数组(阵列)-讲给你懂


Swift字典(dictionary) 用来存储无序的相同类型数据的集合,Swift 字典会强制检测元素的类型,如果类型不同就会报错。每个值(value)都属于一个唯一的键(key),键作为字典中这个值的识别符号,所有键的类型也必须相同(键与值的类型就不一定要相同)。

字典不使用索引来存储我们的项目元素,而是优化了存储项目的方式,以便快速检索。因此,当我们要找某个“値”,或说要找某个“内容”时,它会立即以键(Key)回復給你一個「值」(value),即使我们有一个里面包含100,000个元素的字典,也不是问题。

声明字典

理解难度
★★☆☆☆
实用程度
★★★☆☆

因为字典内的值没有顺序,所以需要根据这个键(key)来找到需要的值(value)。声明字典类型时,使用Dictionary<Key, Value>这个方式,这里的Key表示字典里键的类型,Value表示字典里储存的类型,如下:

// 声明一个字典类型
var someDict: Dictionary<String, String>

// 或是这样也可以
var someAnotherDict: [String: String]

前一個String就是Key,後一個String就是Value。

两个方法都是一样的,用后面的方法就可以了,比较清楚易懂。

创建一个空字典

理解难度
★★☆☆☆
实用程度
★★★☆☆

如果已经有类型标注了,则可以使用[:]设为空字典,如下:

// 声明一个空字典 键的类型是 String , 值的类型是 Int
var myDict = [String: Int]()

// 在字典中新增一个值
myDict["one"] = 1

// 再将字典设为空字典 因为前面已经有类型标注过了 所以使用 [:] 
myDict = [:]

一个key跟一个value组成一组键值对,一个字典以中括号[ ]前后包起来,可以包含多组键值对,每组以逗号 , 分隔,格式如下:

[key1:value1, key2:value2, key3:value3]

存取与修改字典

理解难度
★★★☆☆
实用程度
★★☆☆☆

使用下标(subscript)来存取或是修改字典的值。其余使用方法与数组类似,例子如下:

下标(subscript)的表示方法为字典变数后加一个中括号[ ],中括号里面填入键(key),以取得对应的值(value)。

// 声明一个类型为 [String: String] 的字典
var myDict2 = ["TYO": "Tokyo", "DUB": "Dublin"]

// 字典里值的数量
// 打印出:2
print(myDict2.count)

// 检查字典里是否有值
if myDict2.isEmpty {
    
    
    print("Empty !")
} else {
    
    
    print("Not empty !")
}
// 打印出:Not empty !

// 如果这个 key 没有对应到字典里的值, 就新增一个值
myDict2["LHR"] = "London"

// 如果 key 有对应到字典里的值, 则是修改这个值
myDict2["LHR"] = "London Heathrow"

// 如果要移除这个值 则是将其设为 nil
myDict2["LHR"] = nil

除了使用下标语法,字典也提供方法可以修改或删除,如下:

var myDict3 = ["LHR": "London", "DUB": "Dublin"]

// 使用 updateValue(_:forKey:) 更新一个值
// 返回一个对应值的类型的可选值 (这边就是返回一个 String? )
myDict3.updateValue("London Heathrow", forKey: "LHR")
// 打印出:London Heathrow
print(myDict3["LHR"]!)

// 使用 removeValue(forKey:) 移除一个值
// 返回被删除的值, 如果没有对应的值的话则会返回 nil
myDict3.removeValue(forKey: "DUB")

只需要字典中的键或值时,可以使用keys或values属性。这时会建立一个键或值的新数组,例子如下:

var myDict4 = ["LHR": "London", "DUB": "Dublin"]

// 只需要键时, 使用 keys 属性, 取得一个只有键的数组
var someArr1 = [String](myDict4.keys)
// someArr1 为 ["LHR", "DUB"]

// 只需要值时, 使用 values 属性, 取得一个只有值的数组
var someArr2 = [String](myDict4.values)
// someArr2 为 ["London", "Dublin"]

// 如果需要固定顺序的话 可以加上 sorted() 方法
someArr1.sorted()
someArr2.sorted()

使用for-in遍历字典中的所有值

理解难度
★★★☆☆
实用程度
★★☆☆☆

var myDict5 = ["LHR": "London", "DUB": "Dublin"]

for (code, n) in myDict5 {
    
    
    print("\(code): \(n)")
}
// 打印出:
// LHR: London
// DUB: Dublin

// 如果只需要键或值时, 使用 keys 或 values 属性
for code in myDict5.keys {
    
    
    print(code)
}
// 打印出:
// LHR
// DUB

for n in myDict5.values {
    
    
    print(n)
}
// 打印出:
// London
// Dublin

“遍历”的意思,就是把所有的元素,从头依序全部跑一遍的意思。

字典转换为数组

理解难度
★★★☆☆
实用程度
★★☆☆☆

你可以提取字典的键值(key-value)对,并转换为独立的数组。
实例如下:

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

print("输出字典的键(key)")

for (key) in dictKeys {
    
    
    print("\(key)")
}

print("输出字典的值(value)")

for (value) in dictValues {
    
    
    print("\(value)")
}

想想看,打印出的结果是什么呢?
在这里插入图片描述有没有发现,每次打印出来的结果是不一样的?

想想看,为什么呢?

高效阅读-事半功倍读书法-重点笔记-不长,都是干货

おすすめ

転載: blog.csdn.net/weixin_42385177/article/details/121463343