//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. linux下查找指定时间内修改过的或新建的文件

    1.简单命令 # find -type f \( -newermt '2017-04-19 00:00' -a -not -newermt '2017-04-27 23:59' \) 2.简单实现(参 ...

  2. php自定义函数: 加密下载地址

    function getdownurl($downurl, $extime = "3600", $serverid = 1) { if (empty($downurl)) { re ...

  3. Python菜鸟之路:Python基础-生成器和迭代器、递归

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言, ...

  4. 我的Android进阶之旅------>Android自定义窗口标题实例

    该实例的功能比较简单,但是通过该实例的扩展可以在自定义标题中做出菜单导航等实用的功能,为了实现自定义窗口标题,需要做以下几个步骤: 1.给自定义标题提供一个界面 2.将自定义标题应用给Activity ...

  5. shell编程2 ---条件判断语句

    shell编程2 一.条件判断语句 1.按照文件类型进行判断 eg:test -e /etc/passwd  或者  [ -e /etc/passwd ]  &&echo yes || ...

  6. mysql练习(待补充)

    2.查询‘生物’课程比‘物理’课程成绩高的所有学生的学号 思路: 获取所有生物课程的人(学号,成绩)-临时表 获取所有物理课程的人(学号,成绩)-临时表 根据学号连接两个临时表: 学号 生物成绩 物理 ...

  7. java WEB学习笔记32:HttpSession 接口常用方法 及 HttpServletRequest接口中的Session方法 Demo

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Python 3 mysql 表操作

    Python 3 mysql 表操作 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为 ...

  9. Never Go Away

    Hey if you ever want to leave it allif you ever want to lose control leave it all escape so far away ...

  10. android电池(五):电池 充电IC(PM2301)驱动分析篇【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8970363 android充电这块,有的电源管理芯片内部包含充电管理,如s5pv210 ...