Swift字典集合

news/2024/7/20 20:00:33 标签: Swift视频, swift, Swift教程, iOS8, ios

字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。

如下图所示是字典结构的“学号与学生”集合,学号是键集合,不能重复,学生是值集合,可以重复。

 


提示 字典中键和值的集合是无序的,即便在添加的时候是按照顺序添加的,当取出这些键或值的时候,也会变得无序。字典集合更适合通过键快速访问值,就像查英文字典一样,键就是要查的英文单词,而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释,这也是与字典集合特性对应的。

一、字典声明与初始化

Swift为字典提供了Dictionary结构体类型,我们在声明一个字典的时候可以使用下面的语句。

var studentDictionary: Dictionary<Int, String>

其中,变量studentDictionary明确指定类型为Dictionary<Int, String>。其中<Int, String>是泛型,这表明键的集合是Int类型,值的集合是String类型。

上面声明的集合事实上还不能用,还需要进行初始化,集合类型往往是在声明的同时进行初始化的。示例代码如下:

var studentDictionary1: Dictionary<Int, String> = [102 : "张三",105 : "李四", 109 : "王五"]	①
 
var studentDictionary2 = [102 : "张三",105 : "李四", 109 : "王五"]	②
 
let studentDictionary3 = [102 : "张三",105 : "李四", 109 : "王五"]        	③
 
var studentDictionary4 = Dictionary<Int, String>()        	④

上述代码都是对字典进行声明和初始化,代码①~③行采用[102 : "张三",105 : "李四", 109 : 
"王五"]的方式进行初始化,这是字典的表示方式,语法如下图所示。

 


这个语法类似于JSON中的对象,字典以“{”(左括号)开始,以“}”(右括号)结束。每个键后跟一个“:”(冒号),“键-值”对之间使用“,”(逗号)分隔。

第③行是let声明字典,let声明的字典是不可变字典,必须在声明的同时初始化,一旦被初始化就不可以被修改。

代码第④行是初始化一个空的字典,键集合为Int类型,值集合为String,初始化后没有任何元素。

二、字典的修改

我们可以对字典中的元素进行追加、删除和替换等修改操作。字典元素的追加比较简单,只要给一个不存在的键赋一个有效值,就会追加一个“键-值”对元素。

字典元素删除有两种方法,一种是给一个键赋值为nil,就可以删除元素;另一种方法是通过字典的removeValueForKey方法删除元素,方法返回值是要删除的值。

字典元素替换也有两种方法,一种是直接给一个存在的键赋值,这样新值就会替换旧值;另一种方法是通过updateValue(forKey:)方法替换,方法的返回值是要替换的值。

下面我们来看一个示例:

var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"]	①
 
studentDictionary[110] = "董六"        	②
 
println("班级人数:\(studentDictionary.count)")         	③
 
let dismissStudent = studentDictionary.removeValueForKey(102)   	④
 
println("开除的学生:\(dismissStudent)")         	⑤
 
studentDictionary[105] = nil        	⑥
 
studentDictionary[109] = "张三"        	⑦
 
let replaceStudent = studentDictionary.updateValue("李四", forKey:110)	⑧
println("被替换的学生是:\(replaceStudent)")         	⑨

输出结果如下:

班级人数:4

开除的学生:张三

被替换的学生是:董六

上述代码第①行是声明并初始化字典studentDictionary,第②行代码追加键为110、值为“董六”的一个元素,第③行代码是打印班级学生的人数,count是字典的属性,返回字典的长度。

第④行和第⑥行都是删除元素,第④行代码是使用removeValueForKey方法删除元素,dismissStudent是返回值,它保持了被删除的元素。因此我们在第⑤行打印输出dismissStudent是“开除的学生:张三”。第⑥行studentDictionary[105] = nil语句是直接赋值nil也可以删除105对应的元素。

第⑦行和第⑧行都是替换旧元素,如果第⑦行的键不存在,那么结果是在字典中追加一个新的“键-值”对元素。第⑧行是通过updateValue(forKey:)方法替换元素,方法的返回值是“董六”,第⑨行代码是打印“被替换的学生是:董六”。

三、字典遍历

字典遍历集合也是字典的重要操作。与数组不同,字典有两个集合,因此遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for in循环实现的。

下面是遍历字典的示例代码:

var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"]
 
println("---遍历键---")
for studentID in studentDictionary.keys {        	①
    println("学号:\(studentID)")
}
 
println("---遍历值---")
for studentName in studentDictionary.values {       	②
    println("学生:\(studentName)")
}
 
println("---遍历键:值---")
for (studentID, studentName) in studentDictionary {   	③
    println ("\(studentID) : \(studentName)")
}

运行结果如下:

---遍历键---

学号:105

学号:102

学号:109

---遍历值---

学生:李四

学生:张三

学生:王五

---遍历键:---

105 : 李四

102 : 张三

109 : 王五

从上述代码可见,我们有3种方法遍历字典,它们都采用了for in语句。第①行代码遍历了键集合,其中keys是字典属性,可以返回所有键的集合。第②行代码遍历了值的集合,其中values是字典属性,可以返回所有值的集合。第③行代码遍历取出的字典元素,(studentID, studentName)是元组类型,它是由键变量studentID和值变量studentName组成的。


更多内容请关注国内第一本Swift图书 《Swift开发指南》
本书交流讨论网站: http://www.51work6.com/swift.php
欢迎加入Swift技术讨论群:362298485

欢迎关注智捷iOS课堂微信公共平台



http://www.niftyadmin.cn/n/1036741.html

相关文章

2.Java基础语法

类型转换 原因&#xff1a;开发中存在不同类型的变量或者数据赋值给其他类型的变量&#xff0c;也存在不同类型一起运算&#xff0c;其结果类型要确定下来 自动类型转换 原理&#xff1a;小范围类型的变量可以直接赋值给大范围类型的变量 范围信息 …

3.java程序设计流程控制

案例技术&#xff1a;随机数Random类 作用&#xff1a;产生一个随机数 步骤 1.导包(自动做的)import java.util.Random; 2.创建随机数对象:Random rnew Random(); 3.开始得到随机数:int datar.nextlnt(10);//从0到10 生产指定区间的随机数…

MySQL子查询之行子查询

顾名思义 行子查询 得出的数据是一行多列的数据 我们这两有一张staff 用户表 没错departmentid 是一个部门表的外键 我们可以清楚的看到 赵敏是开发部的 其他两个都属于人事部 如果我们想查询 与黄飞鸿 年龄和所属部门相同的数据 我们首先要查询出黄飞鸿的部门和名称 selec…

Swift字典类

在Foundation框架中提供一种字典集合&#xff0c;它是由“键-值”对构成的集合。键集合不能重复&#xff0c;值集合没有特殊要求。键和值集合中的元素可以是任何对象&#xff0c;但是不能是nil。Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典…

Swift中的循环语句

循环语句能够使程序代码重复执行。Swift编程语言支持4种循环构造类型&#xff1a;while、do while、for和for in。for和while循环是在执行循环体之前测试循环条件&#xff0c;而do while是在执行循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行&…

4.java数组

数组的作用 就是一个容器&#xff0c;用于在程序中存储一批同种类型的数据 数组的定义 静态初始化数组 格式1 数据类型[] 数组名称new 数据类型 new 数据类型[]{元素1&#xff0c;元素2&#xff0c;元素3........} 格式2 数据…

Part 1:基础语言-Cocos2d-x手机游戏开发之C++语言基础-关东升-专题视频课程

Part 1&#xff1a;基础语言-Cocos2d-x手机游戏开发之C语言基础—60642人已学习 课程介绍 本套Cocos2d-x视频教程采用的编程语言为C语言&#xff0c;本教程为专门针对想学习Cocos游戏开发&#xff0c;而没有语言基础的同学而制作的一门C基础课程。课程收益讲师介绍关东升 更…

E. Split Into Two Sets

题目&#xff1a; 题目大意&#xff1a;给定n个由两个数字构成的集合&#xff08;这些数字都不会超过n&#xff09; &#xff0c;要求你把这些集合分成两份&#xff0c;且单份中不能出现相同的数字存在。 题目地址&#xff1a;Problem - E - Codeforces 解题思路&#xff1a; …