上一章Swift教程请查看:swift集合的使用和操作
在本教程中,你将了解dictionary字典是什么,以及如何创建字典dictionary和字典dictionary中的一些常见操作。
在前面Swift数组的文章中,我们学习了如何在一个变量/常量中存储多个值,在本文中,我们将讨论如何将数据/值存储为键值对。
什么是字典dictionary?
dictionary就是一个容器,它可以以无序的方式将多个数据作为键-值对保存。
每个值都与一个唯一的键相关联,并以集合的形式将数据存储在无序列表中,也就是说,你不会以与在字典中定义的项相同的顺序获取元素。
当需要使用集合中的某个标识符查找值时,可以使用dictionary而不是array。假设你想搜索一个国家的首都。在这种情况下,你将创建一个包含关键字key为国家以及价值资本value为首都城市的字典。现在,通过使用关键国家进行搜索,可以从集合中获得首都。
简单来说,就是将一个键与一个值配对,在上面的例子中,我们将一个国家与它的首都配对。
如何在Swift中声明字典?
你可以通过在方括号[]中指定key:value数据类型来创建一个空字典。
例1:声明一个空字典
let emptyDic:[Int:String] = [:]
print(emptyDic)
OR
let emptyDic:Dictionary<Int, String> = [:]
print(emptyDic)
在上面的程序中,我们用Int类型的键和String类型的值声明了一个类型为dictionary的常量emptyDic,并用0值初始化它。
或者
由于Swift是一种类型推断语言,你也可以直接创建dictionary而不需要指定数据类型,但是必须用一些值初始化,这样编译器才能推断出它的类型:
例2:用一些值声明一个字典
let someDic = ["a":1, "b":2, "c":3, "d":4, "e":5, "f":6, "g":7, "h":8, "i":9]
print(someDic)
在上面的程序中,我们声明了一个字典,但没有显式定义类型,而是使用一些默认元素进行初始化。
元素在键:值对中,键的类型是字符串,值的类型是Int。由于dictionary是一个无序列表,所以print(someDic)以不同于定义的顺序输出值。
示例3:用两个数组创建字典
我们还可以使用数组创建一个字典。
let customKeys = ["Facebook", "Google", "Amazon"]
let customValues = ["Mark", "Larry", "Jeff"]
let newDictionary = Dictionary(uniqueKeysWithValues: zip(customKeys,customValues))
print(newDictionary)
在上面的程序中,zip(customKeys,customValues)创建一个新的元组序列,每个元素表示来自customKeys和customValues的值。
现在,我们可以将这个序列传递给Dictionary(uniqueKeysWithValues:)初始化器并创建一个新Dictionary。因此,print(newDictionary)用两个数组中的元素输出一个新字典。
如何在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"])
你还可以使用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)")
}
如何在Swift中修改字典元素?
可以使用下标语法在dictionary中添加元素,你需要将新键作为下标索引,并将类型的新值赋给Dictionary。
例6:在字典中设置元素
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Japan"] = "Tokyo"
print(someDictionary)
在上面的例子中,我们使用下标语法在给定的字典中创建了一个新的键值对“Japan”:“Tokyo”。
你还可以使用下标语法来更改与特定键相关联的值,如下所示:
示例7:更改字典的元素
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
someDictionary["Nepal"] = "KATHMANDU"
print(someDictionary)
一些有用的内置字典功能和属性
isEmpty
此属性确定字典是否为空。如果字典不包含任何值,则返回true,否则返回false。
例8:isEmpty是如何使用的?
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.isEmpty)
first
此属性用于访问字典的第一个元素。
例9:first如何使用?
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.first)
count
此属性返回字典中元素的总数(键值对)。
例10:count是如何使用的?
let someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
print(someDictionary.count)
keys
此属性返回字典中的所有键。
例11:keys是如何工作的?
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let dictKeys = Array(someDictionary.keys)
print(dictKeys)
类似地,你可以使用值来获取字典中的所有值。
removeValue
这个函数从字典中删除并返回键指定的值。这两个键值对都将从字典中删除。
例12:removeValue()如何工作?
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary.removeValue(forKey: "Nepal")
print(val)
print(someDictionary)
类似地,你也可以使用removeAll函数来清空字典。
使用字典的注意事项
1. 虽然在swift中可以使用下标语法访问字典元素,你必须确保关键字在于索引范围内,否则你会得到一个空值。让我们看看这个例子:
例13:key必须存在
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["Japan"]
print(val)
在上面的程序中,没有key
Japan。因此,当你尝试访问键“Japan”的值时,你将得到一个nil值。
2. 同样,在Swift中键值是大小写敏感的,所以必须确保使用正确的大小写键/值。否则,你会得到一个空值。让我们看看这个例子:
示例14:键是大小写敏感的
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["nepal"]
print(val)
在上面的项目中,没有nepal关键字。因此,当你尝试访问关键字“nepal”的值时,你得到一个nil值。
3.如果给定键的值不存在,也可以提供默认值。让我们看看这个例子:
例12:不存在的键的默认值
var someDictionary = ["Nepal":"Kathmandu", "China":"Beijing", "India":"NewDelhi"]
let val = someDictionary["nepal", default:"Not Found"]
print(val)
在上面的程序中,我们指定了一个在访问字典时默认参数中Not Found的值。如果键的值不存在,则返回默认值,否则返回值。
在我们的例子中,关键字“nepal”不存在,因此程序返回Not Found。