`
habout632
  • 浏览: 6000 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

第二节 字典

阅读更多

本文来自于疯子们的开源图书

<!--EndFragment-->

 

字典是存储多个相同类型值的容器。每个值用一个唯一的键进行标识,这个键就是字典中的标示符。与数组中的元素不同,字典中的元素没有固定的顺序。当你想在字典中查询某个值的时候,可以根据他们的键来进行查询,这点跟现实中在字典上查询某个单词很类似的。

Swift中字典所能存储的键值都是非常明确的。与Objective-C中的NSDictionaryNSMutableDictionary不同,他们可以使用任何类型的对象作为键和值,而且没有提供关于这些对象类型的信息。在Swift中,某个字典类型所能存储的键和值的类型是非常明确的,要么通过类型注解,要么就是通过类型推断来明确的声明一下。

Swift的字典类型可以写作Dictionary<KeyType,ValueType>,其中KeyType是键的类型,ValueType是值的类型。

KeyType的唯一限制就是必须可以作为哈希值的,也就是说,它的值必须的是唯一的。所有Swift的基本类型(String,Int,Double,Bool)默认都是可以作为哈希值的,因此都可以作为字典的键。枚举类型的成员也是默认可以作为哈希值的。

字典

你可以使用一个字典值来初始化一个字典,语法跟之前的初始化数组是类似的。字典值是创建具有一个或者多个键值对的字典的快捷方式。

一个键值对是一个键和值的组合。在字典值当中,每个键值对都是使用分号来分隔键和值的。这些键值对可以写作一个列表,使用方括号包裹起来,用逗号分隔开来。

下面的例子创建了一个字典来存储国际机场的名字。这个字典中,键是三个字母的国际航空运输协会编码,值是 机场的名字:

上面的airports字典声明的类型为:Dictionary<String ,String>,表示一个键是String类型,值为StringDictionary类型。

注意:

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循环

也可以通过字典的keysvalues属性单独遍历它的键或者值。

可以使用Array()方法,将字典的keys或者values初始化为一个数组:

注意:

Swift的Dictionary类型是一个无序集合,在遍历一个字典的时候,取出的键,值,键值对的书序是随机的。

创建一个空字典

就像数组一样,可以使用构造器来创建一个具有某种类型的空Dictionary

这个例子创建了一个空的字典,类型为(Int,String),来存储整数及其易于阅读的名字。键是Int类型的,值是String类型的。

如果上下文已经提供了类型信息的话,就可以用空字典值来创建一个空字典,写作[:]

注意:

底层,Swift的数组和字典类型都是作为泛型来实现。更多关于泛型,参见泛型

集合的可变性

数组和集合都可以在单一集合中存储多个值。如果你创建一个数组或者集合,并把它赋给一个变量,那么这个集合就是可变的,意味值你可以添加更多的元素来改变集合的大小,移除已经存在的集合。相反,如果将集合赋给一个常量,那么集合就是不可变的,大小也不能改变。

对于字典来说,不可变指的是你不能修改某个键的值。不可变字典的值一旦设置,就不能再改变了。

对于数组来说,不可变的含义稍微有点差别。你仍然不能执行任何有可能改变数组大小的操作。但是你可以改变数组中某个位置的值。在数组大小固定的情况下,可以使得Array类型的操作获得最优秀的性能。

Array类型的可变性也影响到了数组实例的赋值和修改。更多信息,可以参考集合类型的赋值和拷贝

注意:

在集合大小不需要改变的情况时,最好创建不可变的集合。这有助于编译器优化你创建集合的性能。

 

 

分享到:
评论

相关推荐

    完整详细版Python全套教学课件 第03节 03 字典及操作.pptx

    Python 字典dict详解 Python中的字典(dict)是一种重要的内置数据结构,用于存储键值对的集合。它是可变的、无序的,键不重复,且可以使用多种方式来定义和初始化。 字典的定义和初始化 dict可以使用多种方式来...

    第七天 03字典遍历【千锋Python人工智能学院】1

    接下来,我们解决第二个问题,即如何将字典的key和value互换。这个问题可以通过字典推导式轻松实现: ```python dict1 = {"a": 100, "b": 200, "c": 300} dict2 = {v: k for k, v in dict1.items()} print(dict2) `...

    第七节 暴力破解 - 字典制作工具 Pydictor介绍与使用-01

    2. 等待克隆完成后,输入以下命令:`cd pydictor` 3. 输入以下命令:`python pydictor.py` Pydictor使用基础 Pydictor的使用非常简单,下面我们将讲解Pydictor的基本使用方法。 参数帮助信息 Pydictor提供了详细...

    数据库管理系统的数据字典

    ### 第二节 关系数据库管理系统的数据字典 在关系数据库管理系统中,数据字典存储的关键信息有: 1. **关系模式**:包括关系名、属性名称、数据类型以及主键,定义了数据表的结构。 2. **视图描述**:描述用户...

    二年级语文下册 字典大楼 2教案 北师大版 教案.doc

    在第二课时中,学生会先复习上节课学习的生字,然后进行诗歌的再次朗读,这有助于巩固学生对课文的记忆。通过小组学习的方式,学生还可以相互讨论,运用字典解决在阅读中遇到的不理解的词汇。这样的学习方式既培养了...

    二年级语文下册 字典大楼教案 北师大版 教案.doc

    **第二课时** 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、...

    PDM生成数据字典(Word、Html)

    ##### 第二步:默认下一步 保持默认设置,点击“下一步”继续。 ##### 第三步:默认下一步 继续保持默认设置,点击“下一步”。 ##### 第四步:按图进行勾选 在此步骤中,用户可以根据需要选择要包含在数据字典中...

    字典压缩编码

    1. 初始化字典:算法开始时,创建一个空的字典,通常包含所有可能的一字节字符串。例如,在ASCII编码下,字典将包含256个条目,每个条目对应一个字符。 2. 分析输入数据:从输入数据流中读取一串连续的字符,形成一...

    第七天 02字典的增删改查【千锋Python人工智能学院】1

    本节将详细讲解字典的四个基本操作:查看元素、修改元素、添加元素以及删除元素。 一、查看元素 查看字典中的元素通常通过键(key)来实现。例如: ```python info = {'name': '班长', 'age': 18} print(info['age'...

    管理信息系统实验设计模板

    第二节 可行性分析 一、管理上的可行性 二、技术上的可行性 三、经济上的可行性 四、影响和限制 五、结论 第三节 管理业务调查 一、组织结构调查 二、管理功能调查 三、管理业务流程调查 四、数据流程调查...

    二年级语文上册 我会查字典了 2教案 浙教版.doc

    在第二课时开始时,教师通过复习上节课的生字、多音字、词语理解,再次强化了学生的记忆。之后进行读段落和问答活动,不仅加深了学生对课文的理解,同时也锻炼了他们的语言表达和思维逻辑能力。 总之,通过这个详尽...

    走进搜索引擎(上) 梁斌 编著 上中下

     第二节搜索引擎的发展简史  搜索引擎的发展历史  第三节搜索引擎大事快览  第四节国内著名搜索引擎  百度(www.baidu.com)  中搜(www.zhongsou.com)  天网(e.pku.edu.cn)  搜狗(www.sogou.com...

    三年级语文查字典练习.pdf

    2. “鼎”字用数笔画查字法,共十二画,第六画是“竖折/竖弯”。 3. “颤”字用音序查字法,先查大写字母“C”,再查音节“chàn”。 4. “沉”字音序查字法查“C”,音节“chén”;部首查字法查“氵”,再查七画,...

    WPF 基础视频教程(共50集)-27.资源字典

    本节视频教程将深入探讨资源字典的功能、用途以及如何有效地利用它们来提高代码的可维护性和可复用性。 资源字典在WPF中的主要作用是存储可以跨多个UI元素共享的资源。这些资源可以包括颜色、字体、刷子、样式、...

    11-2022.10.19-移动+字典相关.rar

    2. **上一节内容** - 这可能是一个回顾文件,包含前一节课所学的知识点,帮助学生巩固已学内容,为理解新的“移动”和“字典”概念做准备。 3. **第五周练习参考答案.docx** - 这应该是提供了第五周练习题的官方...

    八年级物理全册第六章熟悉而陌生的力第二节怎样描述力参考实验新版沪科版201912234102

    在八年级物理全册第六章“熟悉而陌生的力”中,特别是第二节“怎样描述力”,主要探讨了如何科学地表示和理解力的作用效果。 1. **力的作用点的影响**:力的作用效果不仅取决于力的大小和方向,还与其作用点的位置...

    第 05 节_GEE 的数据类型(Dictionary,List,Array).pdf

    在合并时,如果遇到了 Key 相同的情况,此时如果在 combine( , ) 命令中指定第二个参数为 true,那么这时在合并的字典中就会将重复的内容保留为第二个变量的值。 Dictionary 内容的更改命令: 在 GEE 中,我们可以...

    完整详细版Python全套教学课件 第02节 内置数据结构06作业.pptx

    例如,第一行是[1],第二行是[1, 1],第三行是[1, 2, 1]。要计算第m行第k个元素,我们可以利用组合数的概念,C(n-1, m-1),它表示从n-1个不同元素中选取m-1个元素的组合数。在Python中,可以使用math库中的comb函数...

Global site tag (gtag.js) - Google Analytics