Swift 字典(Dictionary)

在本教程中,您将了解什么是字典,如何创建字典以及字典中的一些常见操作。

在上一篇Swift 数组文章中,我们学习了如何在变量/常量中存储多个值。在本文中,我们将讨论如何将数据/值存储为键值对。

什么是字典?

字典只是一个容器,可以无序地将多个数据作为键值对保存。

每个值都与一个唯一键相关联,并将数据存储在无序列表中作为集合,也就是说,您获取元素的顺序与您在字典中定义项目的顺序不同。

当您需要在集合中查找具有某个标识符的值时,可以使用字典而不是数组。 假设你想搜索一下这个国家的首府。 在这种情况下,您将创建一个具有国家和首都城市键值对的字典。 现在,您可以通过搜索键:国家,从集合中获得值:首都。

简单来说,您将键与值配对。在上面的示例中,我们将一个国家与其首都配对。

如何在Swift中声明字典?

您可以通过在方括号[]中指定key:value数据类型来创建空字典。

示例1:声明一个空字典

let emptyDic:[Int:String] = [:]
print(emptyDic)

运行该程序时,输出为:

[:]
或者

您还可以如下定义一个空字典:

let emptyDic:Dictionary<Int, String> = [:]
print(emptyDic)

在上面的程序中,我们用Int类型的key和String类型的value声明了一个dictionary类型的常量emptyDic,并用0值初始化了它。

或者

由于Swift是一种类型推断语言,因此您也可以直接创建字典而无需指定数据类型,但必须使用一些值进行初始化,以便编译器可以将其推断为:

示例2:声明具有某些值的字典

let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
print(someDic)

运行该程序时,输出为:

["b": 2, "a": 1, "i": 9, "c": 3, "e": 5, "f": 6, "g": 7, "d": 4, "h": 8]

在上面的程序中,我们声明了一个字典,但没有显式定义类型,而是使用一些默认元素进行了初始化。

元素位于key:value对中,其中key的类型为String,而value的类型为Int。 由于字典是无序列表,因此print(someDic)以不同于定义的顺序输出值。

示例3:从两个数组创建字典

我们还可以使用数组创建字典。

let customKeys = ["Facebook", "Google", "Amazon"]
let customValues = ["Mark", "Larry", "Jeff"]
let newDictionary = Dictionary(uniqueKeysWithValues: zip(customKeys,customValues))
print(newDictionary)

运行该程序时,输出为:

["Amazon": "Jeff", "Google": "Larry", "Facebook": "Mark"]

在上面的程序中,zip(customKeys,customValues)创建一个新的 元组序列,每个元素代表来自customKeys和customValues的值。

现在,我们可以将此序列传递给 Dictionary(Unique eKeysWithValues:) 初始值设定项并创建一个新的Dictionary。 因此,print(NewDictionary)输出一个新的Dictionary,其中包含来自两个数组的元素。

如何在Swift中访问字典元素?

作为数组,可以使用下标语法访问字典的元素。您需要在字典名称后面的方括号中包含要访问的值的键。

示例4:访问字典的元素

let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
print(someDic["a"])
print(someDic["h"])

运行该程序时,输出为:

Optional(1)
Optional(8)

您也可以使用for-in循环访问字典的元素。

示例5:使用for-in循环访问字典的元素

let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
for (key,value) in someDic {
    print("key:\(key) value:\(value)")
}

运行该程序时,输出为:

key:b value:2
key:a value:1
key:i value:9
key:c value:3
key:e value:5
key:f value:6
key:g value:7

如何在Swift中修改字典元素?

可以使用下标语法在字典中添加的元素。您需要包含 新的键 作为下标索引,并为Dictionary类型分配一个新值。

示例6:在字典中设置元素

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Japan"] = "Tokyo"
print(someDictionary)

运行该程序时,输出为:

["Japan": "Tokyo", "China": "Beijing", "India": "NewDelhi", "Nepal": "Kathmandu"]

在上面的示例中,我们使用下标语法在给定的词典中创建了一个新的键值对 "Japan": "Tokyo" 。

您还可以使用下标语法将与特定键关联的值更改为:

示例7:更改字典的元素

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Nepal"] = "KATHMANDU"
print(someDictionary)

运行该程序时,输出为:

["China": "Beijing", "India": "NewDelhi", "Nepal": "KATHMANDU"]

字典内置函数和属性

1. isEmpty 属性 - 判断字典是否为空

此属性确定字典是否为空。如果字典中不包含任何值,它返回true,否则返回false。

示例8:isEmpty如何工作?

let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.isEmpty)

运行该程序时,输出为:

false

2.first 属性 - 返回字典第一个元素

此属性用于访问字典的第一个元素。

示例9:首先如何工作?

let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.first)

运行该程序时,输出为:

Optional((key: "China", value: "Beijing"))

3.count - 返回字典元素总数

此属性返回字典中的元素总数(键值对)。

示例10:计数如何工作?

let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.count)

运行该程序时,输出为:

3

4.keys 属性 - 返回字典中所有的键

此属性返回字典中的所有键。

示例11:keys 如何工作?

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let dictKeys  = Array(someDictionary.keys)
print(dictKeys)

运行该程序时,输出为:

["China", "India", "Nepal"]

同样,您可以使用  values 属性来获取字典中的所有值。

5. removeValue

此函数用于从字典中删除并返回使用键指定的值。 这两个键值对都将从字典中删除。

示例12:removeValue()如何工作?

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val  = someDictionary.removeValue(forKey: "Nepal")
print(val)
print(someDictionary)

运行该程序时,输出为:

Optional("Kathmandu")
["India": "NewDelhi", "China": "Beijing"]

同样,您也可以使用 removeAll 函数清空字典。

注意事项

1.在Swift中使用下标语法访问字典中的元素时,必须确保键位于索引中,否则将获得nil值。让我们在示例中看一下:

示例13:键必须存在

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val  = someDictionary["Japan"]
print(val)

运行该程序时,输出为:

nil

在上述程序中,没有键的 Japan 。因此,当您尝试访问键“Japan ”时,您将获得一个 nil 值。

2.同样,键值在Swift中区分大小写,因此您必须确保使用正确的大小写键/值。 否则,您将获得nil值。 让我们在示例中看一下:

示例14:键区分大小写

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val  = someDictionary["nepal"]
print(val)

运行该程序时,输出为:

nil

在以上程序中,没有键“nepal”。因此,当您尝试访问键“nepal”时,您将获得一个 nil 值。

3.如果给定键的值不存在,则还有一种方法可以提供默认值。让我们在示例中看一下:

示例12:不存在的键的默认值

var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val  = someDictionary["nepal", default:"Not Found"]
print(val)

运行该程序时,输出为:

Not Found

在上述程序中,我们在访问字典时在默认参数中指定了一个 default 值。 如果键的值不存在,则返回默认值,否则返回该值

在我们的实例中,键“ nepal”不存在,因此程序返回default 值: Not Found