//Dictionary

//不可变

//字典里面:是以键值对存放的

//字典存放顺序是无序的

//字典里面:value可以重复,但key不能重复

//字典里面:key一般用字符串表示,value可用不同的对象来填充

NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan" , @"lisi" , @"zhangxiahua" , @"wangdahua" , @"zhaoxiaojie" , @"liuhuaixuan" ,  nil];

NSLog(@"%@" , dic1);

NSLog(@"%ld" , [dic1 count]);

//获取一个字典当中所有的key值

//存放了所有key值的array

NSArray *keyArray = [dic1 allKeys];

for (int i = 0; i < [dic1 count]; i++) {

NSLog(@"%@" , [dic1 objectForKey:[keyArray objectAtIndex:i]]);

//        NSLog(@"%@" , [dic1 objectForKey:[[dic1 allKeys] objectAtIndex:i]]);

}

NSDictionary *dic2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1" , @"value2" , @"key2" , @"value3" , @"key3" , nil];

NSLog(@"%@" , dic2);

//通过key数组和value数组, 快速创建字典

NSArray *keyArray1 = @[@"key1" , @"key2" , @"key3"];//OC数组方便写法

//        NSLog(@"%@" , keyArray);

NSArray *valueArray = @[@"value1" , @"value2" , @"value3"];

//        NSLog(@"%@" , valueArray);

NSDictionary *dic3 = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray1];

NSLog(@"%@" , dic3);

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

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

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

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

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

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

//字典快速写法

NSDictionary *dic4 = @{@"key1":@"value1" , @"key2":@"value2" , @"key3":@"value"};

NSLog(@"%@" , dic4);

Person *p1 = [Person personWithName:@"ren"];

Student *s2 = [Student personWithName:@"xues"];

Teacher *t3 = [Teacher personWithName:@"sdhdsjh"];

NSDictionary *dic = @{@"key1":p1 , @"key2":s2 , @"key3":t3};

NSLog(@"%@" , dic);

常用方法

获取字典数量

NSInteger count = [dic count];

通过key获取对应的value对象

NSObject *valueObj = [dic objectForKey:@"key"];

将字典的key转成枚举对象,用于遍历

NSEnumerator *enumerator = [dic keyEnumerator];

获取所有键的集合

NSArray *keys = [dic allKeys];

获取所有值的集合

NSArray *values = [dic allValues];

初始化一个空的可变字典

NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"key1",@"v2",@"key2",nil];

NSDictionary *dic3 = [NSDictionary dictionaryWithObject:@"v3" forKey:@"key3"];

向字典2对象中添加整个字典对象3

[dic2 addEntriesFromDictionary:dic3];

向字典2对象中最佳一个新的key3和value3

[dic2 setValue:@"value3" forKey:@"key3"];

初始化一个空的可变字典

NSMutableDictionary *dic1 = [NSMutableDictionary dictionary];

将空字典1对象内容设置与字典2对象相同

[dic1 setDictionary:dic2];

将字典中key1对应的值删除

[dic1 removeObjectForKey@"key1"];

NSArray *array = [NSArray arrayWithObjects:@"key1", nil];

根据指定的数组(key)移除字典1的内容

[dic2 removeObjectsForKeys:array];

移除字典所有对象

[dic1 removeAllObjects];

//创建一个可变字典

// 用指定空间大小来初始化

NSMutableDictionary *dic1 = [[NSMutableDictionary alloc] initWithCapacity:1];

Person *p1 = [Person personWithName:@"hdilo" andAge:23];

Person *p2 = [Person personWithName:@"hsdsf" andAge:13];

Person *p3 = [Person personWithName:@"bhycu" andAge:56];

Person *p4 = [Person personWithName:@"yusyt" andAge:67];

Person *p5 = [Person personWithName:@"yhudh" andAge:345];

//增

//从一个字典当中拿出放到别的字典里

//[mdic1 addEntriesFromDictionary:mdic2];

[mdic1 setValue:p1 forKey:@"pingguo"];

[mdic1 setValue:p2 forKey:@"dage"];

[mdic1 setValue:p3 forKey:@"haha"];

[mdic1 setValue:p4 forKey:@"hehe"];

//删

[mdic1 removeObjectForKey:@"dage"];

//按照一组key值进行删除

//用mutableCopy方法,将一个不可变的东西转换成一个可变的东西

//NSMutableDictionary *allkey = [[mdic1 allKeys] mutableCopy];

//改

//当给一个字典设定一对值的话 ,如果字典当中已经存在这个key值,就直接把原来key值当中对应的元素替换掉

//如果没有对应key值,就增加这一对设定的值

[mdic1 setValue:p5 forKey:@"hehe"];

[mdic1 setValue:p5 forKey:@"dede"];

//查

//根据key来查找一个value

Person *p6 = [mdic1 objectForKey:@"haha"];

NSLog(@"%@" , p6);

NSLog(@"%@" , mdic1);

遍历字典

快速枚举

for (id key in dic){

id obj = [dic objectForKey:key];

NSLog(@"%@", obj);

}

一般枚举

NSArray *keys = [dic allKeys];

inr length = [keys count];

for (int i = 0; i < length;i++){

id key = [keys objectAtIndex:i];

id obj = [dic objectForKey:key];

NSLog(@"%@", obj);

}

通过枚举类型枚举

NSEnumerator *enumerator = [dic keyEnumerator];

id key = [enumerator nextObject];

while (key) {

id obj = [dic objectForKey:key];

NSLog(@"%@", obj);

key = [enumerator nextObject];

}

NSDictionary 用法的更多相关文章

  1. NSMapTable

    跟NSDictionary用法差不多,不过区别是NSMapTable可以设置内存选项,例如可以设置key跟value的内存属性(weak/strong),从而避免内存泄露. 例如这个+ weakToW ...

  2. NSDictionary、NSMutableDictionary的基本用法

    NSDictionary.NSMutableDictionary的基本用法 1.不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberW ...

  3. 用法总结:NSArray,NSSet,NSDictionary

    用法总结:NSArray,NSSet,NSDictionary Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序 ...

  4. 字典NSDictionary以及NSMutableDictionary的用法总结

    做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...

  5. NSDictionary、NSMutableDictionary及其枚举器的用法

    .不可变词典NSDictionary 字典初始化 NSNumber *numObj = [NSNumber numberWithInt:]; 以一个元素初始化 NSDictionary *dic = ...

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

    文章转载自:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键 ...

  7. 【转】NSDictionary以及NSMutableDictionary的用法

    原文网址:http://my.oschina.net/u/1245365/blog/177736 摘要 Foundation中的字典是由 键—值 对组成的数据集合.通过key(键),查找对应的valu ...

  8. 【转】目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结 -- 不错

    原文网址:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字 ...

  9. 用法总结:NSArray,NSSet,NSDictionary-备用

    Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合      (集合)NS ...

随机推荐

  1. 【python】-- 基本语法、循环

    数据类型 1.数字: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...

  2. Django 路飞学成书写规范的总结

    路飞学成书写规范的总结 命名 项目/文件/函数 -> 小写+下划线 类 驼峰式 路由 将每个功能的路由进行分割, 或者做上注释 类和方法的注释 每个类都要注释是干什么的 每个方法也要进行注释标明 ...

  3. 几款Java常用基础工具库

    通用工具类(字符串.时间格式化.BeanUtils.IO) 1. commons-lang3库 1.1. org.apache.commons.lang3.StringUtils类 日常代码中,我们经 ...

  4. 小程序canvas转base64方法 使用upng库 亲测没问题

    普通字符串base64编码转化可以使用原生的atob和btoa方法 图片转码:传统的图片转base64的方法可以采用FileReader的readAsDataURL()或canvas.toDataUR ...

  5. 文字溢出 省略css

     overflow:hidden;   text-overflow:ellipsis;   -o-text-overflow:ellipsis; white-space:nowrap;   

  6. 10款CSS3进度条Loading动画

    在线演示 本地下载

  7. 蓝牙通讯 ble

    http://blog.csdn.net/beijingshi1/article/details/36426829

  8. [java]final关键字、finally关键字与finalize()方法

    final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是 ...

  9. 《机器学习实战》学习笔记第九章 —— 决策树之CART算法

    相关博文: <机器学习实战>学习笔记第三章 —— 决策树 主要内容: 一.CART算法简介 二.分类树 三.回归树 四.构建回归树 五.回归树的剪枝 六.模型树 七.树回归与标准回归的比较 ...

  10. Havel-Hakimi定理 POJ1659

    对于图的所有顶点,计算出每个顶点的度,度序列.给定一个序列判断序列是否可图. #include<cstdio> #include<algorithm> #include< ...