ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Swift 字典 > 原文: [https://www.programiz.com/swift-programming/dictionary](https://www.programiz.com/swift-programming/dictionary) #### 在本教程中,您将了解什么是字典,如何创建字典以及字典中的一些常见操作。 在先前的 [Swift Arrays](/swift-programming/arrays "Swift Arrays") 文章中,我们了解了如何在变量/常量中存储多个值。 在本文中,我们将讨论如何将数据/值存储为键值对。 ## 什么是字典? 字典只是一个容器,可以无序地将多个数据作为键值对保存。 从[设置](/swift-programming/sets "Swift Sets")开始,每个值都与唯一键相关联并将数据存储在无序列表中,即,您获得的元素顺序与在字典中定义项目的顺序不同。 当您需要在集合中查找带有某些标识符的值时,可以使用字典而不是数组。 假设您可能要搜索国家的首都。 在这种情况下,您将创建一个键为国家和值为首府城市的字典。 现在,您可以通过搜索关键国家来从集合中获取首都。 简单来说,您将键与值配对。 在上面的示例中,我们将一个国家与其首都配对。 * * * ## 如何在 Swift 中声明字典? 您可以通过在方括号`[]`中指定`key:value`数据类型来创建空字典。 ### 示例 1:声明一个空字典 ```swift let emptyDic:[Int:String] = [:] print(emptyDic) ``` 运行该程序时,输出为: ```swift [:] ``` **或** 您还可以如下定义一个空字典: ```swift let emptyDic:Dictionary<Int, String> = [:] print(emptyDic) ``` 在上面的程序中,我们用类型为`Int`的键和类型为`String`的值声明了类型字典的常量`emptyDic`,并使用 0 值对其进行了初始化。 **或** 由于 Swift 是一种类型推断语言,因此您也可以不指定数据类型而直接创建字典,但是必须使用一些值进行初始化,以便编译器可以将其类型推断为: * * * ### 示例 2:声明具有某些值的字典 ```swift let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9] print(someDic) ``` 运行该程序时,输出为: ```swift ["b": 2, "a": 1, "i": 9, "c": 3, "e": 5, "f": 6, "g": 7, "d": 4, "h": 8] ``` 在上面的程序中,我们声明了一个字典,但没有明确定义类型,而是使用一些默认元素进行了初始化。 元素在键值对中,其中`key`的类型为`String`,`value`的类型为`Int`。 由于字典是无序列表,因此`print(someDic)`以不同于定义的顺序输出值。 * * * ### 示例 3:从两个数组创建字典 我们还可以使用数组创建字典。 ```swift let customKeys = ["Facebook", "Google", "Amazon"] let customValues = ["Mark", "Larry", "Jeff"] let newDictionary = Dictionary(uniqueKeysWithValues: zip(customKeys,customValues)) print(newDictionary) ``` 运行该程序时,输出为: ```swift ["Amazon": "Jeff", "Google": "Larry", "Facebook": "Mark"] ``` 在上述程序中,`zip(customKeys,customValues)`创建一个新的*元组*序列,每个元素表示来自`customKeys`和`customValues`的值。 要了解有关`zip`的工作原理的更多信息,请访问 Swift `zip`。 现在,我们可以将此序列传递给`Dictionary(uniqueKeysWithValues:)`初始化器,并创建一个新的`Dictionary`。 因此,`print(newDictionary)`输出具有两个数组元素的新字典。 * * * ## 如何在 Swift 中访问字典元素? 作为数组,您可以使用*下标语法*来访问字典的元素。 您需要在字典名称之后立即在方括号中包括要访问的值的键。 ### 示例 4:访问字典的元素 ```swift 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"]) ``` 运行该程序时,输出为: ```swift Optional(1) Optional(8) ``` 您还可以使用`for-in`循环访问字典的元素。 * * * ### 示例 5:使用`for-in`循环访问字典的元素 ```swift 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)") } ``` 运行该程序时,输出为: ```swift 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:在字典中设置元素 ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] someDictionary["Japan"] = "Tokyo" print(someDictionary) ``` 运行该程序时,输出为: ```swift ["Japan": "Tokyo", "China": "Beijing", "India": "NewDelhi", "Nepal": "Kathmandu"] ``` 在上面的示例中,我们使用下标语法在给定的字典中创建了一个新的键值对`"Japan": "Tokyo"`。 您还可以使用下标语法将与特定键关联的值更改为: * * * ### 示例 7:更改字典的元素 ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] someDictionary["Nepal"] = "KATHMANDU" print(someDictionary) ``` 运行该程序时,输出为: ```swift ["China": "Beijing", "India": "NewDelhi", "Nepal": "KATHMANDU"] ``` * * * ## 一些有用的内置字典函数&属性 ### 1\. `isEmpty` 此属性确定字典是否为空。 如果字典不包含任何值,则返回`true`,否则返回`false`。 #### 示例 8:`isEmpty`如何工作? ```swift let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] print(someDictionary.isEmpty) ``` 运行该程序时,输出为: ```swift false ``` * * * ### 2.`first` 此属性用于访问字典的第一个元素。 #### 示例 9:`first`如何工作? ```swift let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] print(someDictionary.first) ``` 运行该程序时,输出为: ```swift Optional((key: "China", value: "Beijing")) ``` * * * ### 3.`count` 此属性返回字典中的元素总数(键值对)。 #### 示例 10:`count`如何工作? ```swift let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] print(someDictionary.count) ``` 运行该程序时,输出为: ```swift 3 ``` * * * ### 4.`keys` 此属性返回字典中的所有键。 #### 示例 11:`keys`如何工作? ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] let dictKeys = Array(someDictionary.keys) print(dictKeys) ``` 运行该程序时,输出为: ```swift ["China", "India", "Nepal"] ``` 同样,您可以使用值来获取字典中的所有值。 * * * ### 5\. `removeValue` 此函数从字典中删除并返回用键指定的值。 这两个键值对将从字典中删除。 #### 示例 12:`removeValue()`如何工作? ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] let val = someDictionary.removeValue(forKey: "Nepal") print(val) print(someDictionary) ``` 运行该程序时,输出为: ```swift Optional("Kathmandu") ["India": "NewDelhi", "China": "Beijing"] ``` 同样,您也可以使用`removeAll`函数清空字典。 * * * ## 要记住的事情 **1\.** 在 Swift 中使用下标语法访问字典元素时,必须确保键位于索引中,否则将获得`nil`值。 让我们在示例中看一下: ### 示例 13:键必须存在 ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] let val = someDictionary["Japan"] print(val) ``` 运行该程序时,输出为: ```swift nil ``` 在上述程序中,没有键`Japan`。 因此,当您尝试访问键`Japan`的值时,将获得`nil`值。 **2\.** 同样,键值在 Swift 中区分大小写,因此您必须确保使用正确的大小写键/值。 否则,您将获得`nil`值。 让我们在示例中看一下: ### 示例 14:键区分大小写 ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] let val = someDictionary["nepal"] print(val) ``` 运行该程序时,输出为: ```swift nil ``` 在以上程序中,没有`nepal`。 因此,当您尝试访问键`nepal`的值时,您将获得`nil`值。 **3\.** 如果给定键的值不存在,则还有一种方法可以提供默认值。 让我们在示例中看一下: ### 示例 12:不存在的键的默认值 ```swift var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"] let val = someDictionary["nepal", default:"Not Found"] print(val) ``` 运行该程序时,输出为: ```swift Not Found ``` 在上述程序中,我们在访问字典时在`default`参数中指定了**值**。 如果键的值不存在,则返回默认值,否则返回该值。 在我们的例子中,键`nepal`不存在,因此程序返回`Not Found`。