Object C学习笔记13-Dictionary字典
通过Array数组和Set集合的学习和理解,可以想象得到Dictionary也分为两种情况了,那就是可变和不可变两种类型的。的确如此,在Object C中提供了两个字典类,分别为NSDictionary 和 NSMutableDictionary. 在.NET中我们也学习过Dictionary类,这个集合的存储方式是键值对的方式存储的。而且使用Dictionary查找元素也极为简单。
一 NSDictionary 不可变字典
(1) 初始化字典
NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];NSDictionary *dic2=[[NSDictionary alloc] init];NSLog(@"%d",[dic count]);NSLog(@"%d",[dic1 count]);NSLog(@"%d",[dic2 count]);
上面列举了三种方式来初始化字典对象:
1. [[NSDictionary alloc] init] 方法最为常见了,先给NSDictionary分配空间再初始化,这也是大众的方式;
2. 使用dictionaryWithObject forkey 该方法在初始化的时候提供了两个参数,第一个为存储的值,第二个为key,这个和我们平时在.NET中有点不一样的,这里的key是放在后面的。
3. 使用dictionaryWithObjectsAndKeys 这个方法同样用于初始化NSDictionary,这里可以传入多个值,奇数为value值,偶数为key值,但是必须以nil形式结尾。这个和之前的NSArray,NSSet一致,标识集合的结束。
(2)获得NSDictionary的长度
NSDictionary的长度使用方法count方法来获得,这个和大多数集合一样
NSDictionary *dic=[NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys:@"hechen",@"name",@"25",@"age", nil];NSDictionary *dic2=[[NSDictionary alloc] init];NSLog(@"%d",[dic count]);NSLog(@"%d",[dic1 count]);NSLog(@"%d",[dic2 count]);
测试例子
以上代码中获得了三个NSDictionary的长度,分别输出的结果为1,2,0;这里也刚好说明了上面三种方式初始化的不同之处。
(3)获得NSDictionary中Keys的迭代
NSEnumerator *enumer=[dic1 keyEnumerator];NSString *key2=[enumer nextObject];while(key2!=nil){NSLog(@"输出Key=%@",key2);key2=[enumer nextObject];}
以上代码可以看得出来使用keyEnumerator 方法获取NSDictionary Key的集合迭代,然后使用迭代器遍历输出所有的元素。
(4)获取NSDictionary中的Values的迭代
NSEnumerator *enumerObject=[dic1 objectEnumerator];for(NSObject *object in enumerObject){NSLog(@"输出Value = %@",object);}
测试案例
获取Value的方法和获取key的方法基本类似,这里在循环遍历的时候有些不同,但是两者的结果是一样的,可以稍微注意一下
(5)根据Key获取Value
NSString *va=[dic1 objectForKey:@"name"];NSLog(@"objectForKey = %@",va);
在Object C通过key获取Value要使用方法objectForKey,在上面的案例中已经简单而且明确的展示了其用法。
二. NSMutableDictionary 动态字典
NSMutableDictionary 是NSDictionary的子类,继承了其所有的方法和属性。但是和NSDictionary有着一定的区别就是NSMutableDictionary可以动态的修改和增加删除里面的元素。
(1) dictionaryWithCapacity方法设置其初始容量
NSMutableDictionary *muDic1=[NSMutableDictionary dictionaryWithCapacity:10];
上面的代码中初始化了一个NSMutableDictionary对象,并且设置其初始容量为10; 和NSMutableArray,NSMutableSet一样,当存储的元素达到最大容量之后会自动扩充容量,所以不用担心数组越界。
(2) 往NSMutableDictionary中添加元素
[muDic1 setObject:@"中国" forKey:@"name"];[muDic1 setObject:@"area" forKey:@"add"];NSEnumerator *enumerKeys=[muDic1 keyEnumerator];for(NSString *key in enumerKeys){NSString *value=[muDic1 objectForKey:key];NSLog(@"输出的值 = %@",value);}
从以上代码可以看到使用 setObject forKey 方法可以往字典中添加元素, 方法的前一个参数为value,后一个参数为key。使用循环可以得到相应的值。
(3) 删除字典中的元素
[muDic1 removeObjectForKey:@"add"];for(NSString *key in [muDic1 keyEnumerator]){NSLog(@"-----%@",[muDic1 objectForKey:key]);}
以上代码是根据一个key值来删除NSMutableDictionary中的元素,所使用的方法为removeObjectForKey,在NSMutableDictionary中还提供了根据多个key值删除的元素的方法。
- (void)removeObjectsForKeys:(NSArray *)keyArray;这个方法参数为一个数组,用于删除数组中包含的key的所有元素。
[muDic1 removeObjectsForKeys:[NSArray arrayWithObjects:@"ab", nil]];[muDic1 removeAllObjects];for(NSString *key in [muDic1 keyEnumerator]){NSLog(@"*********%@",[muDic1 objectForKey:key]); }
上面第一句代码用于从数组中删除包含的元素,而第二句则用于删除NSMutableDictionary中的所有元素。最终没有任何结果输出。
以上是关于字典的相关内容的简单介绍,系统提供的方法远不止这些,仍需要不断的去努力与实践,实践永远是最有效的方法。
有人问我这学习Object C是要搞iphone开发的节奏啊,其实不是为了开发iPhone才学习Object C的,只是为了让自己还能静下心来去学习,好在实施过程中给客户交流还有扯淡的资本!
转载于:https://www.cnblogs.com/qingyuan/p/3590094.html
Object C学习笔记13-Dictionary字典相关推荐
- mybatis学习笔记(13)-延迟加载
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...
- Object C学习笔记22-#define 用法
上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...
- Object C学习笔记12-集合
Object C学习笔记12-集合 2014-03-08 17:25 by 贺臣, 262 阅读, 0 评论, 收藏, 编辑 这里讲到的集合是指Set集合,其实Array也是一种类型的集合.在Obje ...
- opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版
基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...
- Linux学习笔记13
Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...
- 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning
台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...
- java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略
<量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...
- 【计算机网络学习笔记13】交换技术(下)
[计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...
- R语言小白学习笔记13—基本统计
R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...
最新文章
- 【Android】Fragment官方中文文档
- Linux k8s 启动 停止 查询状态 脚本
- creat_caltab生成六边形标定板(黑底白点)
- Windows Phone 7范例游戏Platformer实战5——多点触控编程
- 计算机课程设计结业感言,课程设计感言
- 超炫酷的枪械3D动图,喜欢的不得了!
- lfu算法实现java_LFU五种实现方式,从简单到复杂
- python和opencv人脸表情识别_使用OpenCV和Python进行人脸识别
- Error while trying to use the following icon from the Manifest
- 软件系统设计-1-软件设计原则
- 纯前端滑块拼图验证组件(多端兼容)
- 互联网营销相比传统营销的5大优势
- 319. 灯泡开关【我亦无他唯手熟尔】
- SpringBoot整合dubbo详解(阿里官方dubbo-spring-boot-starter)
- 手机Vbus上防护用OVP简介
- 【New】SAP增值税由 16%调整为 13%税率的具体操作
- php网页转html网页怎么弄
- Windows 10/11离线安装.NET Framework 3.5
- Java串口与手机通信
- python 点到直线的距离
热门文章
- c await和java_blog/java/test/awaitility.zh.md at master · c-rainstorm/blog · GitHub
- 《DBNotes:Join算法的前世今生》
- 《MySQL——group by使用tips》
- c语言 函数的参数传递示例_C语言中带有示例的remove()函数
- 路由表,路由,路由规则_路由和路由表简介
- java中Scanner类中 next()与nextLine()的区别
- StringTokenizer将一个字符串分解为单词或者标记
- MySQL 纯insert_MySQL使用INSERT插入多条记录
- mybatis collection_MyBatis之关联查询
- hihoCoder挑战赛16 A—— 王胖浩与三角形