swift字典用法和操作全解 – Swift最新教程

上一章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。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?