字典是存储多个相同类型值的容器。每个值用一个唯一的键进行标识,这个键就是字典中的标示符。与数组中的元素不同,字典中的元素没有固定的顺序。当你想在字典中查询某个值的时候,可以根据他们的键来进行查询,这点跟现实中在字典上查询某个单词很类似的。
Swift中字典所能存储的键值都是非常明确的。与Objective-C中的NSDictionary和NSMutableDictionary不同,他们可以使用任何类型的对象作为键和值,而且没有提供关于这些对象类型的信息。在Swift中,某个字典类型所能存储的键和值的类型是非常明确的,要么通过类型注解,要么就是通过类型推断来明确的声明一下。
Swift的字典类型可以写作Dictionary<KeyType,ValueType>,其中KeyType是键的类型,ValueType是值的类型。
KeyType的唯一限制就是必须可以作为哈希值的,也就是说,它的值必须的是唯一的。所有Swift的基本类型(String,Int,Double,Bool)默认都是可以作为哈希值的,因此都可以作为字典的键。枚举类型的成员也是默认可以作为哈希值的。
字典值
你可以使用一个字典值来初始化一个字典,语法跟之前的初始化数组是类似的。字典值是创建具有一个或者多个键值对的字典的快捷方式。
一个键值对是一个键和值的组合。在字典值当中,每个键值对都是使用分号来分隔键和值的。这些键值对可以写作一个列表,使用方括号包裹起来,用逗号分隔开来。
下面的例子创建了一个字典来存储国际机场的名字。这个字典中,键是三个字母的国际航空运输协会编码,值是 机场的名字:
上面的airports字典声明的类型为:Dictionary<String ,String>,表示一个键是String类型,值为String的Dictionary类型。
注意:
airports声明的时候,使用的是var(变量),而不是let(常量),因为之后更多的机场会加到这个字典中的。
airports使用了两个键值对来进行初始化的。第一个键值对的键为TYO,值为Tokyo.第二个键值对的键为DUB,值为Dublin.
这个字典值包含两个String:String对。符合airports变量声明(键为String ,值为String)的类型,所以上面给airports字典初始化的语句是合法的。
就像数组一样,如果使用键和值类型一致的字典值来初始化字典的话,就没有必要指明字典的类型了。airports的初始化过程可以简写为:
‘
由于字典值中的的键都是同样类型的,值也是同样类型的,因此Swift可以推断出airport的类型为Dictionary<String,String>.
字典的访问与修改
可以通过字典的方法,属性,或者使用下标来访问和修改一个字典。像数组一样,可以通过只读属性count来查看Dictionary中的元素个数.
可以使用下标来给字典添加一个新元素。使用一个适当类型的键值作为小标,并赋予一个适当类型的新值。
也可以通过下标来改变某个键对应的值。
除了下标之外,也可以使用updateValue(forKey:)来设置或者更新某个键的值。就像上面的使用下标的例子,如果某个键的值不存在,updateValue(forKey:)会设置值,否则的话,更新该值。与下标不同,updateValue(forKey:)在更新完成之后,会返回更新之前的值。这可以使你能够判断是否真的更新了。
updateValue(forKey:)方法返回的是一个可选类型。例如,一个值为String的字典,该方法返回的就是String?.如果有值的话,就是键对应的值。否则的话,返回的时nil.
也可以通过下标从字典中获取某个键对应的值。同上面的一样,返回的也是一个可选类型
可以使用下标从字典中移除某个键值对,只需要将那个键对应的值置为nil即可:
此外,可以使用removeValueForKey移除一个键值对。如果键值对存在的话,移除之后返回被移除的值,否则返回nil.
字典的遍历
可以使用for-in循环来遍历字典的键值对。字典中的元素作为(key,value)来返回。在循环当中,可以将键值对分解成两个临时的变量或者常量。
关于for-in 循环,可以参考For循环
也可以通过字典的keys和values属性单独遍历它的键或者值。
可以使用Array()方法,将字典的keys或者values初始化为一个数组:
注意:
Swift的Dictionary类型是一个无序集合,在遍历一个字典的时候,取出的键,值,键值对的书序是随机的。
创建一个空字典
就像数组一样,可以使用构造器来创建一个具有某种类型的空Dictionary。
这个例子创建了一个空的字典,类型为(Int,String),来存储整数及其易于阅读的名字。键是Int类型的,值是String类型的。
如果上下文已经提供了类型信息的话,就可以用空字典值来创建一个空字典,写作[:]
注意:
底层,Swift的数组和字典类型都是作为泛型来实现。更多关于泛型,参见泛型
集合的可变性
数组和集合都可以在单一集合中存储多个值。如果你创建一个数组或者集合,并把它赋给一个变量,那么这个集合就是可变的,意味值你可以添加更多的元素来改变集合的大小,移除已经存在的集合。相反,如果将集合赋给一个常量,那么集合就是不可变的,大小也不能改变。
对于字典来说,不可变指的是你不能修改某个键的值。不可变字典的值一旦设置,就不能再改变了。
对于数组来说,不可变的含义稍微有点差别。你仍然不能执行任何有可能改变数组大小的操作。但是你可以改变数组中某个位置的值。在数组大小固定的情况下,可以使得Array类型的操作获得最优秀的性能。
Array类型的可变性也影响到了数组实例的赋值和修改。更多信息,可以参考集合类型的赋值和拷贝。
注意:
在集合大小不需要改变的情况时,最好创建不可变的集合。这有助于编译器优化你创建集合的性能。
相关推荐
Python 字典dict详解 Python中的字典(dict)是一种重要的内置数据结构,用于存储键值对的集合。它是可变的、无序的,键不重复,且可以使用多种方式来定义和初始化。 字典的定义和初始化 dict可以使用多种方式来...
接下来,我们解决第二个问题,即如何将字典的key和value互换。这个问题可以通过字典推导式轻松实现: ```python dict1 = {"a": 100, "b": 200, "c": 300} dict2 = {v: k for k, v in dict1.items()} print(dict2) `...
2. 等待克隆完成后,输入以下命令:`cd pydictor` 3. 输入以下命令:`python pydictor.py` Pydictor使用基础 Pydictor的使用非常简单,下面我们将讲解Pydictor的基本使用方法。 参数帮助信息 Pydictor提供了详细...
### 第二节 关系数据库管理系统的数据字典 在关系数据库管理系统中,数据字典存储的关键信息有: 1. **关系模式**:包括关系名、属性名称、数据类型以及主键,定义了数据表的结构。 2. **视图描述**:描述用户...
在第二课时中,学生会先复习上节课学习的生字,然后进行诗歌的再次朗读,这有助于巩固学生对课文的记忆。通过小组学习的方式,学生还可以相互讨论,运用字典解决在阅读中遇到的不理解的词汇。这样的学习方式既培养了...
**第二课时** 1. **精读课文**:深入理解每个段落的意义,个别学生朗读,集体评价。 2. **理解内容**:分析课文,总结查字典的益处,如帮助认字、写字、理解字义。 3. **提出问题**:鼓励学生提问,通过小组合作...
第二节、数据字典 31 第三节、权限管理 32 3-1、增加操作组 32 3-2、增加用户 33 3-3、操作组成员 33 3-4、操作组权限 34 第四节、参数设置 35 4-1、编号规则 35 4-2、用户管理参数 36 4-3、供水管理参数 37 4-4、...
##### 第二步:默认下一步 保持默认设置,点击“下一步”继续。 ##### 第三步:默认下一步 继续保持默认设置,点击“下一步”。 ##### 第四步:按图进行勾选 在此步骤中,用户可以根据需要选择要包含在数据字典中...
1. 初始化字典:算法开始时,创建一个空的字典,通常包含所有可能的一字节字符串。例如,在ASCII编码下,字典将包含256个条目,每个条目对应一个字符。 2. 分析输入数据:从输入数据流中读取一串连续的字符,形成一...
本节将详细讲解字典的四个基本操作:查看元素、修改元素、添加元素以及删除元素。 一、查看元素 查看字典中的元素通常通过键(key)来实现。例如: ```python info = {'name': '班长', 'age': 18} print(info['age'...
第二节 可行性分析 一、管理上的可行性 二、技术上的可行性 三、经济上的可行性 四、影响和限制 五、结论 第三节 管理业务调查 一、组织结构调查 二、管理功能调查 三、管理业务流程调查 四、数据流程调查...
在第二课时开始时,教师通过复习上节课的生字、多音字、词语理解,再次强化了学生的记忆。之后进行读段落和问答活动,不仅加深了学生对课文的理解,同时也锻炼了他们的语言表达和思维逻辑能力。 总之,通过这个详尽...
第二节搜索引擎的发展简史 搜索引擎的发展历史 第三节搜索引擎大事快览 第四节国内著名搜索引擎 百度(www.baidu.com) 中搜(www.zhongsou.com) 天网(e.pku.edu.cn) 搜狗(www.sogou.com...
2. “鼎”字用数笔画查字法,共十二画,第六画是“竖折/竖弯”。 3. “颤”字用音序查字法,先查大写字母“C”,再查音节“chàn”。 4. “沉”字音序查字法查“C”,音节“chén”;部首查字法查“氵”,再查七画,...
本节视频教程将深入探讨资源字典的功能、用途以及如何有效地利用它们来提高代码的可维护性和可复用性。 资源字典在WPF中的主要作用是存储可以跨多个UI元素共享的资源。这些资源可以包括颜色、字体、刷子、样式、...
2. **上一节内容** - 这可能是一个回顾文件,包含前一节课所学的知识点,帮助学生巩固已学内容,为理解新的“移动”和“字典”概念做准备。 3. **第五周练习参考答案.docx** - 这应该是提供了第五周练习题的官方...
在八年级物理全册第六章“熟悉而陌生的力”中,特别是第二节“怎样描述力”,主要探讨了如何科学地表示和理解力的作用效果。 1. **力的作用点的影响**:力的作用效果不仅取决于力的大小和方向,还与其作用点的位置...
在合并时,如果遇到了 Key 相同的情况,此时如果在 combine( , ) 命令中指定第二个参数为 true,那么这时在合并的字典中就会将重复的内容保留为第二个变量的值。 Dictionary 内容的更改命令: 在 GEE 中,我们可以...
例如,第一行是[1],第二行是[1, 1],第三行是[1, 2, 1]。要计算第m行第k个元素,我们可以利用组合数的概念,C(n-1, m-1),它表示从n-1个不同元素中选取m-1个元素的组合数。在Python中,可以使用math库中的comb函数...