目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结(转)

做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便。在Objective-C语言中 词典对象就是做这个事情的,不过在同一个词典对象中可以保存多个不同类型的数据,不像Java与C 只能保存声明的相同类型的数据,它的关键字为NSDictionary与NSMutableDictionary。阅读过我之前文章的朋友应该从关键字的 结构就可以看出这两个的区别。很明显前者为不可变词典,或者为可变词典。

NSDictionary *dict;

for(NSString * akey in dict)

{

  //........

}很好用

1.创建不可变词典

[NSDictionary dictionaryWithObjectsAndKeys:..] : 使用键值对儿直接创建词典对象,结尾必需使用nil标志结束。

[NSDictionary initWithObjectsAndKeys:..] :使用键值对儿初始化词典对象,结尾必需使用nil标志结束。

[dictionary count]: 得到词典的长度单位。

[dictionary keyEnumerator]: 将词典的所有KEY储存在NSEnumerator中,NSEnumerator很像Java语言 中的迭代器,使用快速枚举可以遍历词典中所有储存KEY值。

[dictionary  objectEnumerator]: 将词典的所有value储存在NSEnumerator中,用法和上面差不多可用来遍历KEY对应储存的Value值。

[dictionary objectForKey:key]: 通过传入KEY对象可以拿到当前KEY对应储存的值。

复制代码
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//添加我们的测试代码

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"雨松MOMO",@"name",@"15810463139",@"number", nil];

//得到词典的数量
int count = [dictionary count];
NSLog(@"词典的数量为: %d",count);

//得到词典中所有KEY值
NSEnumerator * enumeratorKey = [dictionary keyEnumerator];

//快速枚举遍历所有KEY的值
for (NSObject *object in enumeratorKey) {
NSLog(@"遍历KEY的值: %@",object);
}

//得到词典中所有Value值
NSEnumerator * enumeratorValue = [dictionary objectEnumerator];

//快速枚举遍历所有Value的值
for (NSObject *object in enumeratorValue) {
NSLog(@"遍历Value的值: %@",object);
}

//通过KEY找到value
NSObject *object = [dictionary objectForKey:@"name"];

if (object != nil) {
NSLog(@"通过KEY找到的value是: %@",object);
}



int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
复制代码

 

2.创建可变词典对象

NSMutableDictionary 是NSDictionary的子类,所以继承了NSDictionary的方法。

[NSMutableDictionary dictionaryWithCapacity:10] : 创建一个可变词典初始指定它的长度为10.,动态的添加数据如果超过10这个词典长度会自动增加,所以不用担心数组越界。推荐用这种方式

[NSMutableDictionary initWithCapacity:10]  :只是初始化一个词典的长度为10。

[dictionary setObject:@"雨松MOMO" forKey:@"name"] :向可变的词典动态的添加数据 ,这里的key是name ,值是雨松MOMO如果词典中存在这个KEY的数据则直接替换这个KEY的值。(易混的地方,慎重!)

[dictionary removeAllObjects..] : 删除掉词典中的所有数据。

[dictionary removeObjectForKey..] :删除掉词典中指定KEY的数据 。

复制代码
#import <UIKit/UIKit.h>
#import "MyClass.h"
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//添加我们的测试代码

//创建词典对象,初始化长度为10
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:10];

//向词典中动态添加数据
[dictionary setObject:@"雨松MOMO" forKey:@"name"];

[dictionary setObject:@"15810463139" forKey:@"number"];


//通过KEY找到value
NSObject *object = [dictionary objectForKey:@"name"];

if (object != nil) {
NSLog(@"通过KEY找到的value是: %@",object);
}



int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
复制代码

词典类的存在就是为了解决在大量数据中查找方便,因为它是通过key直接找到value所以速度很快,避免一个个的遍历寻找造成的效率低下,善用字典类会帮你的程序提速。

文章出处:http://blog.csdn.net/xys289187120/article/details/682373

转载于:https://www.cnblogs.com/xinshijie/p/4320331.html

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

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

相关文章

android string数组转json_移动端开发基础【20】pages.json的配置项pages

uni-app项目是通过pages节点配置应用由哪些页面组成&#xff0c;pages节点接收一个数组&#xff0c;数组每个项都是一个对象&#xff0c;其属性值如下&#xff1a;(1) 属性&#xff1a;path类型&#xff1a;String描述&#xff1a;配置页面路径(2) 属性&#xff1a;style类型&a…

java中重载和重写

重载&#xff1a; 同一个类中定义名称相同但参数个数或类型不同的方法&#xff0c;因此java可根据参数的个数或类型的不同来调用相应的方法。 重写&#xff08;覆盖&#xff09;&#xff1a; 在子类中&#xff0c;定义名称&#xff0c;参数个数与类型均与父类完全相同的方法&am…

thinkphp 内置函数详解

D&#xff08;&#xff09; 加载Model类M&#xff08;&#xff09; 加载Model类 A&#xff08;&#xff09; 加载Action类L&#xff08;&#xff09; 获取语言定义C&#xff08;&#xff09; 获取配置值 用法就是 C&#xff08;"这里填写在配置文件里数组的下标"…

dual mysql 获取序列_如何使用mysql 一次查询多个序列

postgresql使用的sql语句如下&#xff1a;selectt.seqValuefrom(selectnextval(seq_attr_id)seqValue,generate_series(1,5)seqNum)t&#xff1b;oracle使用的sql语句如下&#xff1a;selectseq_attr_id.nextvalfro...postgresql使用的sql语句如下&#xff1a;select t.seqValu…

PHP多线程的实现(PHP多线程类)

通过WEB服务器来实现PHP多线程功能。 当然&#xff0c;对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果&#xff0c;并不是真正意义上的多线程。 但不管怎么样&#xff0c;它还是能满足我们的一些需要的&#xff0c;在需要类似多线程的功能方面…

SPOJ Problem 6219:Edit distance

LCS问题&#xff0c;状态转移方程为f[i][j]min(f[i-1][j],f[i][j-1],f[i-1][j-1])1,若a[i]b[j]则f[i][j]f[i-1][j-1] #include<cstdio> #include<cstring> #define max(a,b)a>b?a:b #define INF 1000005 int t,i,j,k,l1,l2,q; char a[2005],b[2005]; int f[200…

int main() 与 void main()

从大一入学刚接触C到现在已满7个月了&#xff0c;虽然刚开始就知道int main才是标准的写法&#xff0c;但一直没有深刻理解为什么不能用void main而必须使用int main。 刚好最近有非计算机相关专业学C的同学问我int main、main和void main有什么区别&#xff0c;便觉得是时候好…

Socket、Http、TCP/IP、UDP的联系与区别

HTTP协议&#xff1a;简单对象访问协议&#xff0c;对应于应用层 &#xff0c;HTTP协议是基于TCP连接的 tcp协议&#xff1a; 对应于传输层 ip协议&#xff1a; 对应于网络层 TCP/IP是传输层协议&#xff0c;主要解决数据如何在网络中传输&#xff1b;而HTTP是应用层协…

honeywell扫码枪取消回车_霍尼韦尔条码扫描器常见问题与解决方法

原标题&#xff1a;霍尼韦尔条码扫描器常见问题与解决方法对于用户使用无线条码扫描器还是有线&#xff0c;再使用过程中难免会遇到一些小问题&#xff0c;又不知道这么解决&#xff0c;下面兆麟条码技术部提供一些条码扫描器出现的问题以及解决方法&#xff0c;供大家参考学习…

Ubuntu Server 分区案例

为什么80%的码农都做不了架构师&#xff1f;>>> 只有一台服务器&#xff0c;配置硬盘1TB&#xff0c;内存4GB&#xff0c;既要做开发服务器&#xff0c;又要做Web服务器和数据库服务器&#xff0c;分区如下&#xff1a; 挂载点大小分区格式 /boot512MBext4/20GBext…

转:有关常量的知识点

整型常量十进制&#xff1a;18、-31long int型常量 123l、123L、123456l、123456Lunsigned int型常量 123u、 123U根据实际数据大小确定int型还是long型以数字“0”开始的整型常量是八进制数022、-037010和10大小不一样因为八进制并不常用&#xff0c;所以此种表示法比较少见以…

python移位操作困惑

1.在使用python进行移位操作的时候发现python进行移位操作后的数值与其他语言不一样&#xff08;java,php,javascript&#xff09;&#xff0c;然后google了下 看到了这篇帖子http://www.cnblogs.com/zhengyun_ustc/archive/2009/10/14/shifting.html&#xff0c;然后又看了看…

e480 黑苹果_Thinkpad E480黑苹果组建Fusion Drive——鱼和熊掌我都要

Thinkpad E480黑苹果组建Fusion Drive——鱼和熊掌我都要2020-03-28 21:00:244点赞17收藏4评论小编注&#xff1a;此篇文章来自即可瓜分10万金币&#xff0c;周边好礼达标就有&#xff0c;邀新任务奖励无上限&#xff0c;点击查看活动详情概述近日在家闲来无事&#xff0c;一直…

Android -- WebView进度条

有系统actionbar requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能 setContentView(R.layout.main);//布局 setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法 setProgressBarIndeter…

360网络修复工具_为什么大家都在骂360,但是360依旧是很强?

相信很多小伙伴也多多少少的听说过就是不要随便装360&#xff0c;因为装上360会如何如何。这些人往往说起来也是很有道理&#xff0c;我在以前上学的时候也是这么觉得&#xff0c;但是后来工作之后发现并不是这样。360先说一下360安全卫士的功能&#xff0c;有系统优化、垃圾清…

c语言编程题目(一)

2017-05-09 19:54 1人阅读 评论(0) 收藏 举报转自&#xff1a;http://blog.csdn.NET/oqqhutu12345678/article/details/69524383 1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * …

Java运行时内存

对于java程序员来说&#xff0c;并不必显示地对内存进行管理&#xff0c;一切都交给java虚拟机去做吧&#xff0c;而且&#xff0c;你也不一定做得比java虚拟机来得专业。好像所有内存管理都交给虚拟机去做就万事大吉了&#xff0c;但是&#xff0c;事实有时并非如此&#xff0…

中班机器人上课视频_家委会:出班费买智能扫地机器人,不用家长搞卫生了,莫名其妙...

【01】原来大家上学&#xff0c;几乎是很随意的样子&#xff0c;有人至没上过幼儿园&#xff0c;有的上过半年&#xff0c;然后就直接升小学。可即使是升小学了&#xff0c;家长也不会管&#xff0c;全凭自己了。可如今随着社会的发展&#xff0c;父母们都非常重视孩子们的学习…

Powerful Sleep(神奇的睡眠-睡眠生物钟的秘密:如何睡得更少却睡得更好)阅读笔记...

睡眠机制 我们活着的时候&#xff0c;大脑会产生脑电波。脑电图仪器通过贴在人头上的一些电极读出脑电波的活动&#xff0c;然后把活动用图表显示出来。 睡眠过程可以分为5个过程&#xff0c;划分依据与大脑发出的脑电波类型。 当人清醒时&#xff0c;大脑发出β脑电波&#xf…

ue4集合类型_UE4粒子系统渲染管线概述

本文基于UE4版本4.25.3&#xff0c;对Cascade粒子系统的移动端渲染管线进行简单的概括和描述。Game Thread部分粒子系统Actor被Spawn&#xff08;或所在的Level被加载&#xff09;的时候&#xff0c;UParticleSystemComponent注册和初始化&#xff0c;并通过CreateSceneProxy函…