在先前的 Swift Arrays 文章中,我们了解了如何在变量/常量中存储多个值。 在本文中,我们将讨论如何将数据/值存储为键值对。
字典只是一个容器,可以无序地将多个数据作为键值对保存。
从设置开始,每个值都与唯一键相关联并将数据存储在无序列表中,即,您获得的元素顺序与在字典中定义项目的顺序不同。
当您需要在集合中查找带有某些标识符的值时,可以使用字典而不是数组。 假设您可能要搜索国家的首都。 在这种情况下,您将创建一个键为国家和值为首府城市的字典。 现在,您可以通过搜索关键国家来从集合中获取首都。
简单来说,您将键与值配对。 在上面的示例中,我们将一个国家与其首都配对。
您可以通过在方括号[]中指定key:value数据类型来创建空字典。
let emptyDic:[Int:String] = [:]
print(emptyDic) 运行该程序时,输出为:
[:]或
您还可以如下定义一个空字典:
let emptyDic:Dictionary<Int, String> = [:]
print(emptyDic) 在上面的程序中,我们用类型为Int的键和类型为String的值声明了类型字典的常量emptyDic,并使用 0 值对其进行了初始化。
或
由于 Swift 是一种类型推断语言,因此您也可以不指定数据类型而直接创建字典,但是必须使用一些值进行初始化,以便编译器可以将其类型推断为:
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的类型为String,value的类型为Int。 由于字典是无序列表,因此print(someDic)以不同于定义的顺序输出值。
我们还可以使用数组创建字典。
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的值。 要了解有关zip的工作原理的更多信息,请访问 Swift zip。
现在,我们可以将此序列传递给Dictionary(uniqueKeysWithValues:)初始化器,并创建一个新的Dictionary。 因此,print(newDictionary)输出具有两个数组元素的新字典。
作为数组,您可以使用下标语法来访问字典的元素。 您需要在字典名称之后立即在方括号中包括要访问的值的键。
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循环访问字典的元素。
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 您可以使用下标语法在字典中添加元素。 您需要包括新的键作为下标索引,并为Dictionary分配一个新的类型值。
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Japan"] = "Tokyo"
print(someDictionary) 运行该程序时,输出为:
["Japan": "Tokyo", "China": "Beijing", "India": "NewDelhi", "Nepal": "Kathmandu"]在上面的示例中,我们使用下标语法在给定的字典中创建了一个新的键值对"Japan": "Tokyo"。
您还可以使用下标语法将与特定键关联的值更改为:
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Nepal"] = "KATHMANDU"
print(someDictionary) 运行该程序时,输出为:
["China": "Beijing", "India": "NewDelhi", "Nepal": "KATHMANDU"]此属性确定字典是否为空。 如果字典不包含任何值,则返回true,否则返回false。
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.isEmpty) 运行该程序时,输出为:
false此属性用于访问字典的第一个元素。
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.first) 运行该程序时,输出为:
Optional((key: "China", value: "Beijing"))此属性返回字典中的元素总数(键值对)。
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.count) 运行该程序时,输出为:
3此属性返回字典中的所有键。
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let dictKeys = Array(someDictionary.keys)
print(dictKeys) 运行该程序时,输出为:
["China", "India", "Nepal"]同样,您可以使用值来获取字典中的所有值。
此函数从字典中删除并返回用键指定的值。 这两个键值对将从字典中删除。
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值。 让我们在示例中看一下:
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["Japan"]
print(val) 运行该程序时,输出为:
nil在上述程序中,没有键Japan。 因此,当您尝试访问键Japan的值时,将获得nil值。
2. 同样,键值在 Swift 中区分大小写,因此您必须确保使用正确的大小写键/值。 否则,您将获得nil值。 让我们在示例中看一下:
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["nepal"]
print(val) 运行该程序时,输出为:
nil在以上程序中,没有nepal。 因此,当您尝试访问键nepal的值时,您将获得nil值。
3. 如果给定键的值不存在,则还有一种方法可以提供默认值。 让我们在示例中看一下:
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["nepal", default:"Not Found"]
print(val) 运行该程序时,输出为:
Not Found在上述程序中,我们在访问字典时在default参数中指定了值。 如果键的值不存在,则返回默认值,否则返回该值。
在我们的例子中,键nepal不存在,因此程序返回Not Found。