Objective-C学习篇08—NSDictionary与NSSet
Objective-C学习篇08—NSDictionary与NSSet
NSDictionary与NSMutableDictionary
NSSet与NSMutableSte
字典
字典:字典分为可变字典NSDictionary和不可变字典NSMutableDictionary.字典中的数据都是以键值对的形式保存的,键和值可以是任何对象,一般使用字符串作为键.
使用字典可以大大提高我们编程的效率,下面让我们看一个用字典表示乐曲信息的例子.表示乐曲信息的结构基本都是一样的,但也有个别乐曲有所不同,例如有的乐曲的作者是多个人,有的乐曲有参考信息等.
图(a)中,每个框包围的部分就是一个字典对象。一个乐曲的完整信息由多个字典对象构成,例如,可以通过name得到曲名,通过lyrics得到作词者,通过music得到作曲者.通过note得到备注.当然也有可能其中某一项是空的.
在这个例子中,key和value都是字在串类型的对象,value由多个字符串构成的时候可以用()把它们括起来,这种情况下字典对象的值相当―个数组对象.另外,除了字符串之外,字典对象的值还支持任意对象.例如,也可以把歌曲的声音或视频定义为―个对象放人字典对象中.
让我们再来看―个用字典对象表示大学教室的例子,如图(b)所示,和乐曲的例子一样,每个框包围的部分就是一个字典对象.关键字capacity用来表明教室可以装多少个人mic和screen用来表明教室是否配备了麦克和投影屏幕.数值类型的value既可以使用字符串也可以使用NSNumber来描述.
在面向过程的语言中,一般使用下标或成员名来获取数组或结构体的值。字典对象的key和value都可以是对象类型.所以可扩展性非常高,可以用在各种环境下.
字典的键必须是唯一的.另外,nil不能作为字典的键.
字典对象的值可以是除了nil外的任意对象,也可以是数组对象或字典对象。
NSDictionary
NSDictionary 字典继承自NSObject 是一个不可变的字典,字典中存储的元素都是以键值对的形式存在(key-value),数据存储是按照key1:value1 key2:value2 ...的形式进行存储.key值必须是唯一的,value值可以重复.字典中只能存放对象类型的数据,key值和value值必须是对象,且字典中存放的键值对是无序的.
创建
1. 创建一个空字典 init 便利构造器 dictionary
NSDictionary *dic = [[NSDictionary alloc] init];NSDictionary *dic1 = [NSDictionary dictionary];
2. 创建拥有键值对的字典 initWithObjectsAndKeys:
便利构造器方法 dictionaryWithObjectsAndKeys:
NSDictionary *dic2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"18", @"age", @"zhangSan", @"name", @"yao", @"gender", nil]; NSLog(@"%@", dic2);
打印:
2015-11-30 13:01:40.306 Myself[1711:145326] {
age = 18;
gender = yao;
name = zhangSan;
}
注意事项:
1.的时候value值在前,key值在后
2. 字典是无序的
3. 字典在创建时以nil结尾
4. key值一般都是字符串对象,value值可以是任意的,但必须也是对象类型的
3. 用一个已有的字典对象初始化另一个字典 initWithDictionary:
便利构造器方法 dictionaryWithDictionary:
NSDictionary *dic3 = [[NSDictionary alloc] initWithDictionary:dic2];
4.访问
1. 获取字典中键值对的数量 count NSInteger dCount = dic3.count; 2. 获取字典中所有的key值 .allKeys NSArray *keyArray = dic3.allKeys;3. 获取字典中所有的value值 .allValues NSArray *valueArray = dic3.allValues;4. 根据给定的key值返回对应的value值 objectForKey: NSString *value = [dic3 objectForKey:@"age"]; NSLog(@"%@", value); // 打印 18
5. 遍历字典
forin 遍历字典的时候,默认遍历的就是字典的key值
for (NSString *key in dic3) {NSString *value = [dic3 objectForKey:key];NSLog(@"%@ = %@", key, value); }
打印:
2015-11-30 13:13:57.952 Myself[1737:151680] age = 18
2015-11-30 13:13:57.952 Myself[1737:151680] name = zhangSan
2015-11-30 13:13:57.952 Myself[1737:151680] gender = yao
NSMutableDictionary
NSMutableDictionary 可变字典,继承自 NSDictionary,管理的是可变键值对,相对于NSDictionary增加了删除,添加,修改的方法,随着字典中元素的变更,NSMutableDictionary会自动管理内存.
创建
创建并初始化一个长度为capacity的可变字典 initWithCapacity
便利构造器方法 dictionaryWithCapacity
NSMutableDictionary *mDic = [[NSMutableDictionary alloc] initWithCapacity:0];NSMutableDictionary *mDic1 = [NSMutableDictionary dictionaryWithCapacity:0];
增加和删除
1. 添加键值对 setObject:<#(id)#> forKey:<#(id<NSCopying>)#>
[mDic setObject:@"wangMaZi" forKey:@"L"];[mDic setObject:@"zhangSan" forKey:@"B"];
2. 修改键值对 setObject:<#(id)#> forKey:<#(id<NSCopying>)#>
[mDic setObject:@"xiaoPing" forKey:@"B"];NSLog(@"%@", mDic);
注意:添加和修改键值对的方法是一样的,如果发现字典中没有对应的key值,此时就添加,如果发现字典中有相同key值存在,此时就覆盖,原因就是字典中key值是唯一的
3. 根据key值删除键值对 removeObjectForKey:
[mDic removeObjectForKey:@"L"];
4. 删除字典中所有的键值对 removeAllObjects
[mDic removeAllObjects];
NSSet
Foundation框架中提供了NSSet,它是一组单值对象的集合.同NSArray不同,NSSet存储的是无序的对象,同一个对象也只能保存一个.
集合的特点:
1. 集合中的元素都是唯一的
2. 集合中的元素都是无序的
3. 集合中只能方对象类型的元素
1. 创建一个空集 init 便利构造器方法 set
NSSet *set = [[NSSet alloc] init];NSSet *set1 = [NSSet set];
2. 创建一个拥有元素的集合 initWithObjects:
便利构造器方法 setWithObjects:
NSSet *set2 = [[NSSet alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
3. 用一个数组初始化集合对象 arrayWithObjects:
若array中存在重复元素时,可以把数组中重复的元素剔除掉,在集合中只会保存一个.
NSArray *sArr = [NSArray arrayWithObjects:@"1", @"2", @"2", @"4", @"5", nil];NSSet *set3 = [NSSet setWithArray:sArr];NSLog(@"%@", set3);
2015-11-30 14:37:46.206 Myself[1784:178830] {(
1,
4,
2,
5
)}
访问
4. 获取集合中元素的个数 count NSInteger *sCount = set2.count;5. 获取集合中随机元素 anyObject NSString *sValue = set2.anyObject;6. 获取集合中所有的元素 allObjects NSArray *sArray = set2.allObjects;
判断
7. 判断集合中是否包含某个对象 containsObject:
BOOL isCountain = [set2 containsObject:@"1"];NSLog(@"%@", isCountain ? @"包含" : @"不包含");//包含
8. 判断是不是子集 isSubsetOfSet:
NSSet *set4 = [NSSet setWithObjects:@"1", @"2", @"3", nil];NSSet *set5 = [NSSet setWithObjects:@"1", @"2", nil];BOOL isSub = [set5 isSubsetOfSet:set4];NSLog(@"%@", isSub ? @"是子集" : @"不是子集");// 是子集
9. 判断两个集合是否有交集 intersectsSet:
BOOL isInter = [set4 intersectsSet: set5];NSLog(@"%@", isInter ? @"有交集" : @"没有交集");//有交集
10. 判断两个集合是否相同 isEqualToSet:
BOOL isSame = [set4 isEqualToSet:set5];NSLog(@"%@", isSame ? @"相同" : @"不相同");
NSMutableSet
NSMutableSet 可变的集合,继承自 NSSet
1. 创建 setWithCapacity:
NSMutableSet *mSet = [NSMutableSet setWithCapacity:0];[mSet addObject:@"1"];[mSet addObject:@"123"];[mSet addObject:@"456"];NSLog(@"%@", mSet);
2. 删除可变集合中的元素 removeObject:
[mSet removeObject:@"1"];NSLog(@"%@", mSet);
3. 删除可变集合中所有的元素 removeAllObjects
[mSet removeAllObjects];NSLog(@"%@", mSet);
总结:
1.有序的角度: 数组有序, 字典和集合都是无序的
2.能否通过下标来访问: 数组可以, 字典和集合都不可以
3.元素是否可以重复: 数组可以重复, 字典中key值不可以重复,value值可以重复, 集合中元素不可以重复
4.打印的样式: 数组: () 字典: {} 集合: {()}
注意:数组和字典经常结合起来使用;
转载于:https://www.cnblogs.com/zmc815/p/5325838.html
Objective-C学习篇08—NSDictionary与NSSet相关推荐
- OD使用教程8(下)- 调试篇08|解密系列
OD使用教程8(下)- 调试篇08 让编程改变世界 Change the world by program 此前几节课小甲鱼教会了大家"基本的打补丁"方法,以至于很多朋友告诉小 ...
- OD使用教程8(上)- 调试篇08|解密系列
OD使用教程8(上)- 调试篇08 让编程改变世界 Change the world by program 此前几节课小甲鱼教会了大家"基本的打补丁"方法,以至于很多朋友告诉小 ...
- Python深度学习篇
Python深度学习篇一<什么是深度学习> Excerpt 在过去的几年里,人工智能(AI)一直是媒体大肆炒作的热点话题.机器学习.深度学习 和人工智能都出现在不计其数的文章中,而这些文章 ...
- 《鸟哥的Linux 私房菜 基础学习篇(第三版)》——1.2 Torvalds的Linux开发
本节书摘来自异步社区<鸟哥的Linux 私房菜 基础学习篇(第三版)>一书中的第1章,第1.2节,作者:鸟哥著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1. ...
- iPhone软件开发编程语言Objective C学习资料
iPhone软件开发编程语言Objective C学习资料 一.XCode.Objective-C.Cocoa说的是几样东西? 答案:三样东西. XCode:你可以把它看成是一个开发环境,就好像V ...
- SoC学习篇—Linux 系统搭建
SoC学习篇-Linux 系统搭建 一.制作.dtb与.rbf文件 1.编译硬件工程 2.文件制作 二.启动操作系统内核 1.编译uboot 2.生成preloader-mkpimage.bin文件 ...
- 安全学习篇:ARP缓存中毒攻击
安全学习篇:ARP缓存中毒攻击 一.ARP基础知识 1. ARP简介 2. ARP映射方式 3. ARP工作方式 二.ARP缓存中毒攻击 1. 攻击原理 2. 攻击演示 个人博客:coonaa.cn ...
- 阿里云天池大赛赛题解析――深度学习篇
作者:天池平台 出版社:电子工业出版社 品牌:电子工业出版社 出版时间:2021-09-01 阿里云天池大赛赛题解析――深度学习篇
- 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录
目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...
最新文章
- 深入理解JVM——虚拟机GC
- squid在企业网中的应用
- 咱们一起聊聊Zookeeper
- 设计模式复习-桥接模式
- 在一头扎进机器学习前应该知道的那些事儿
- 0 uC/OS 系统精讲索引
- smarty二维foreach示例[顺代一维数组],再次加强版
- 【相机标定系列】使用matlab工具箱标定后的结果换算
- 【毕业设计】 python小游戏设计 - 走迷宫游戏设计与实现
- Tensorflow实现Softmax回归
- 太阳光是平行光吗_百思 | 太阳光是不是平行光?
- OpenModelica.VehicleInterfaces离线库安装
- 云服务器ECS是什么
- Python 三维姿态估计+Unity3d 实现 3D 虚拟现实交互游戏
- 量子计算机的成熟度模型,全球首家:紫光展锐通过 TMMi 软件测试成熟度模型集成 5 级认证...
- 浙江海發進出口股份有限公司官网上线|LTD五金技术行业案例分享
- 谁说前端不能搞红黑树,用这55张图拿JS一起手撕红黑树
- 计算机u盘设备无法启动不了怎么办,u盘无法启动提示错误代码10该怎么处理
- 数据库分类,市场上常见数据库
- 都柏林大学圣三一学院计算机,2021年都柏林大学圣三一学院什么专业好?这些专业你选对了吗?...
热门文章
- 未来一年商业智能的发展前景如何?
- 隐藏微信小程序左上角的返回或home按钮 wx.hideHomeButton
- 惊涛怪浪(double dam-break) -- position based fluids
- 一步步追踪Dialog的创建流程(一)
- python股票数据分析_Python数据分析之股票走势
- win7 64位安装Tensorflow CPU 版
- 用python生成个性二维码
- 实际上Ubuntu在你最起初配置完系统以后,是无法访问root类型的操作的(下面详解),ubuntu系统网络设置方法(图文)
- 从爆红到凉凉,「蚂蚁呀嘿」只用了 7 天
- egg extend ts_从 Egg.js 到 NestJS,爱码客后端选型之路