通过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字典相关推荐

  1. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  2. Object C学习笔记22-#define 用法

    上一篇讲到了typedef 关键字的使用,可以参考文章 Object C 学习笔记--typedef用法 .而在c中还有另外一个很重要的关键字#define. 一. #define 简介 在C中利用预 ...

  3. Object C学习笔记12-集合

    Object C学习笔记12-集合 2014-03-08 17:25 by 贺臣, 262 阅读, 0 评论, 收藏, 编辑 这里讲到的集合是指Set集合,其实Array也是一种类型的集合.在Obje ...

  4. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  5. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  6. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...

  8. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

  9. 【计算机网络学习笔记13】交换技术(下)

    [计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...

  10. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

最新文章

  1. 【Android】Fragment官方中文文档
  2. Linux k8s 启动 停止 查询状态 脚本
  3. creat_caltab生成六边形标定板(黑底白点)
  4. Windows Phone 7范例游戏Platformer实战5——多点触控编程
  5. 计算机课程设计结业感言,课程设计感言
  6. 超炫酷的枪械3D动图,喜欢的不得了!
  7. lfu算法实现java_LFU五种实现方式,从简单到复杂
  8. python和opencv人脸表情识别_使用OpenCV和Python进行人脸识别
  9. Error while trying to use the following icon from the Manifest
  10. 软件系统设计-1-软件设计原则
  11. 纯前端滑块拼图验证组件(多端兼容)
  12. 互联网营销相比传统营销的5大优势
  13. 319. 灯泡开关【我亦无他唯手熟尔】
  14. SpringBoot整合dubbo详解(阿里官方dubbo-spring-boot-starter)
  15. 手机Vbus上防护用OVP简介
  16. 【New】SAP增值税由 16%调整为 13%税率的具体操作
  17. php网页转html网页怎么弄
  18. Windows 10/11离线安装.NET Framework 3.5
  19. Java串口与手机通信
  20. python 点到直线的距离

热门文章

  1. c await和java_blog/java/test/awaitility.zh.md at master · c-rainstorm/blog · GitHub
  2. 《DBNotes:Join算法的前世今生》
  3. 《MySQL——group by使用tips》
  4. c语言 函数的参数传递示例_C语言中带有示例的remove()函数
  5. 路由表,路由,路由规则_路由和路由表简介
  6. java中Scanner类中 next()与nextLine()的区别
  7. StringTokenizer将一个字符串分解为单词或者标记
  8. MySQL 纯insert_MySQL使用INSERT插入多条记录
  9. mybatis collection_MyBatis之关联查询
  10. hihoCoder挑战赛16 A—— 王胖浩与三角形