Swift字典集合
字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(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组成的。
欢迎关注智捷iOS课堂微信公共平台
Swift字典集合的更多相关文章
- swift字典集合-备
Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...
- Swift 2.0学习笔记(Day 16)——字典集合
Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合.键集合是不能有重复元素的,而值集合是可以重复的,键和值是成 ...
- 《从零开始学Swift》学习笔记(Day 16)——字典集合
原创文章,欢迎转载.转载请注明:关东升的博客 Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素.字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 ...
- Swift字典类
在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合.键集合不能重复,值集合没有特殊要求.键和值集合中的元素可以是任何对象,但是不能是nil.Foundation框架字典类也分为 ...
- Swift 字典 Dictionary基本用法
import UIKit /* 字典的介绍 1.字典允许按照某个键访问元素 2.字典是由两部分组成, 一个键(key)集合, 一个是值(value)集合 3.键集合是不能有重复的元素, 值集合可以有重 ...
- C#中服务端接受前端JSON字符串转换成字典集合
我们是否可以把从前端接受的JSON字符串转换成字典集合呢? 比如从前端接收:{'size':'10', 'weight':'10kg'} 在服务端转换成:[{size:"10"}, ...
- python :列表 字典 集合 类 ----局部变量可以改全局变量
#列表 字典 集合 类 ----局部变量可以改全局变量,除了整数和字符串 names=["alex","jack","luck"] def ...
- Wpf ListBox数据绑定实例1--绑定字典集合
1.使用ListBox绑定Dictionary字典数据 ListBox常用事件SelectionChanged private void bindListBox() { Dictionary<s ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
随机推荐
- 如何将mysql表结构导出成Excel格式的(并带备注)
http://www.liangchan.net/liangchan/4561.html 1.使用一个mysql管理工具:SQLyog,点击菜单栏“数据库”下拉的最后一项: 导出的格式如下: 2.要想 ...
- PIL在windwos系统下Image.show无法显示图片问题的解决方法
环境:1.win7 64位 2.python 2.7.8 3.PIL-1.1.7.win32-py2.7 在运行一下例子时候出现问题: #-*-coding:utf-8-*- __author__ = ...
- google域名邮箱申请 gmail域名邮箱申请(企业应用套件)指南
近期一直有朋友问我怎么注冊域名邮箱,于是整理出来,贴出来吧.已经非常具体了,你能够直接对比着做了.什么是域名邮箱? 假设你有一个自己的域名,通过对域名dns进行设置,创建以自己的域名作为邮箱后缀的邮箱 ...
- 图像切割之(五)活动轮廓模型之Snake模型简单介绍
图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...
- 理解 strcpy方法
char* strcpy(char* strDest, const char* strSrc) { assert((strDest!=NULL) && (strSrc !=NULL)) ...
- POJ 3261 Milk Patterns 可重复k次的最长重复子串
Milk PatternsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3261 Description ...
- android应用程序监听SMS Intent广播
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent. 对于应用程序监听SMS Intent广播,首先需 ...
- [AngularJS] Javascript scope and AngularJS $scope
Scope resolution of our Angular documents works exactly the same way scope resolution works in plain ...
- [转]UINavigationController 返回的方法汇总
[html] view plaincopy [self.navigationController popViewControllerAnimated:YES]; UINavigationControl ...
- 网卡及MAC和PHY的区别
转载:http://blog.sina.com.cn/s/blog_53d7350f0100mudb.html 一块以太网网卡包括OSI(开方系统互联)模型的两个层.物理层和数据链路层.物理层定义了数 ...