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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础逆向工程24_C++_01_类_this指针_继承本质_多层继承

1 类内的成员函数和普通函数的对比 1.1 主要是从参数传递、压栈顺序、堆栈平衡来总结. 1.参数传递:成员函数多传一个this指针 2.压栈顺序:成员函数会将this指针压栈,在函数调用取出 3.堆栈平衡:普通函数是外平栈 对比图如下&#…

Wordpress基础:精简头部wp_head

https://www.cnblogs.com/tinyphp/p/5859167.html Wordpress基础&#xff1a;精简头部wp_head 在Wordpress里 <?php wp_head(); ?> wp_head()是一个重要的函数&#xff0c;它允许插件开发者向你的站点动态地添加CSS和javascript&#xff0c;如果我们不在模板中引入这…

Nodejs架构之json空处理

2019独角兽企业重金招聘Python工程师标准>>> 判断一个json是否存在某个对象。 正确的做法是 data {"mch_id":"12345678","hb_type":"NORMAL","hblist":"dddd"}; if(data ! null && data.hbli…

表达式求值及转换算法

2019独角兽企业重金招聘Python工程师标准>>> 后缀表达式求值算法 stack operands; //运算数栈 while(没到表达式尾) {scanf("一个运算对象op");if(op is 运算数)operands.push(op);else if(op is 运算符){operand_right operands.pop();operand_left o…

关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市

&#xfeff;&#xfeff;承蒙广大读者的厚爱我的 《iOS实战&#xff1a;传感器卷&#xff08;Swift版&#xff09;》京东上市了&#xff0c;欢迎广大读者提出宝贵意见。http://item.jd.com/11760248.html 欢迎关注关东升新浪微博tony_关东升。 关注智捷课堂微信公共平台&#…

带分页的标签

原型图 图片.png重要的实现代码 var getMemo function(pageNo,name){$(#dataDiv).html("");$.ajax({url: basePath "/signIn/set/getSignSetListPage",datatype: json,type: "POST",data: { "pageNo": pageNo,"name":name…

Apache2 部署flask项目

Apache2 部署flask项目 需要安装的插件&#xff1a; apt-get install apache2 apt-get install libapache2-mod-wsgi 在 /etc/apache2/sites-available/ 目录下创建对应的项目配置文件“xxx.conf”&#xff0c;用于项目与Apache2之间的链接(配置文件名自定义)&#xff1a;…

[iOS Animation]-CALayer 性能优化实例

2019独角兽企业重金招聘Python工程师标准>>> 一个可用的案例 现在我们已经对Instruments中动画性能工具非常熟悉了&#xff0c;那么可以用它在现实中解决一些实际问题。 我们创建一个简单的显示模拟联系人姓名和头像列表的应用。注意即使把头像图片存在应用本地&…

WordPress 多语言支持(本地化)

https://www.cnblogs.com/ryanzheng/p/8309261.html WordPress 多语言支持&#xff08;本地化&#xff09; 本博客将介绍WordPress的多语言制作 首先需要在wp-content目录下创建一个languages文件夹&#xff0c;用于存放语言包文件。 然后在模板目录下的functions.php&…

ZooKeeper1 利用虚拟机搭建自己的ZooKeeper集群

前言: 前段时间自己参考网上的文章&#xff0c;梳理了一下基于分布式环境部署的业务系统在解决数据一致性问题上的方案&#xff0c;其中有一个方案是使用ZooKeeper&#xff0c;加之在大数据处理中&#xff0c;ZooKeeper确实起到协调服务的作用&#xff0c;所以利用周末休息时间…

解决SublimeCodeIntel回车换行误打代码

SublimeCodeIntel会自动匹配并联想词汇, 这在换行的时候非常麻烦, 每次点Enter 都会误打出代码, 解决办法分两步:第一步是在Perferences/setting User 中加入 "auto_complete_commit_on_tab": true, 然后看Perferences/KeyBindings Default中 { "keys": [&…

Html5响应式设计与实现广场

由于提出的想法响应式设计&#xff0c;越来越多的网站使用这样的思想。各类大型网站如雨后春笋般涌了出来。例如&#xff1a;小米商城。天猫等。 至于响应式设计的概念等大家能够去百度百度&#xff0c;我这里就不相信解说了。直接为大家带来源代码。用Html5实现响应式的九宫格…

工作问题日志

1. 获取用户请求的路径&#xff1a;HttpServletRequest request (HttpServletRequest) req;String servletPath request.getServletPath(); 2. 相对通用的读文件流的方法&#xff08;Windows 和 Linux上都可以用&#xff09;&#xff1a;拿到流&#xff0c;然后再去读流中的内…

【j360-boot】Spring-boot系列三(崩溃模式,不是你崩就是电脑崩)

2019独角兽企业重金招聘Python工程师标准>>> j360-boot spring-boot入门工程之j360-boot&#xff1a;&#xff08;欢迎star、fork&#xff09; https://github.com/xuminwlt/j360-boot spring-boot官方地址 http://projects.spring.io/spring-boot/ 【j360-boot】Sp…

裸眼3D全攻略3:拍摄3D—瞳距、镜距、视角偏转与空间感

http://sd89.blog.163.com/blog/static/356041322014112532958728/ 3D图片的拍摄&#xff0c;与平面有着全新的不同要求&#xff0c;那就是空间感的表现。 简单来说&#xff0c;空间感是由两条视线分别从左右不同的视角&#xff0c;各自获取物体左右两面的不同信息交汇而产生的…

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示&#xff1a; 0-5&#xff1a; 21题&#xff0c;正确21题&#xff0c;错误21题42题 。小于44格子&#xff0c;都写上&#xff0c;哪怕输入2:8&#xff0c;实际也是5:5 0-10 66题&#xff0c;正确66题&#xff0c;错误66题132题 大于44格子&#xff0c;正确66题抽取44*…

Webpack使用指南

Webpack 是当下最热门的前端资源模块化管理和打包工具。 什么是webpack Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔&#xff0c;等到实际需要的时候再异…

JS--数组和字典

JS--数组和字典 定义数组 var my_array new Array(); 一、JS数组 JavaScript中的数组类似于Python的列表   https://www.cnblogs.com/bigberg/p/9237856.html 1 a [11,22,33,44] 常见功能&#xff1a;  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 obj.length 数…

vue-cli创建项目

vue学习资料 Vue.js官网&#xff08;https://vuejs.org.cn/&#xff09; Vue-cli (https://github.com/vuejs/vue-cli) Vue-rescource (https//github.com/vuejs/vue-rescource) Vue-router (https://github.com/vuejs/vue-router) better-scroll (https://github.com/ustbhuan…

通过webbrowser实现js与winform的相互调用

为什么80%的码农都做不了架构师&#xff1f;>>> 1客户端页面 <!DOCTYPE html><html xmlns"http://www.w3.org/1999/xhtml"> <head><meta charset"utf-8" /><title></title> </head> <body>&l…