NSDictionary
    1、什么是字典
        字典是也是一种集合结构,功能与我们现实中的字典工具一样
    2、字典的元素是什么
        任意类型的对象地址构成键值对
    3、什么是键值对
        键值对是由key和value构成必须一一对应
        键值对中的key必须保证是唯一的    
    4、字典的存储方式
       字典是一种无序保存的集合
    5、如何查找值
        根据键值对中的key找到相应的值

================================================
NSDictionary的创建

1)如何创建一个字典对象
        //实例化方法
        -(id)initWithObjectsAndKeys: (id)object,…;
        -(id)initWithDIctionary:(NSDictionary*)otherDictionary;
        -(id)initWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;

//类方法创建
        +(id)dictionaryWithObjectsAndKeys:(id)object,….;
        +(id)dictionaryqWithDictionary:(NSDictionary *)dict;
        +(id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys;

//创建2
        NSDictionary *dic = @{@“1”: @“one”, @“2”:@“two”};

//字典中的元素是以键值对的形式存储
        //@"One" 和 @"1" 组成了一个键值对
        //@"One"称为值(value)@"1" 称为键
        //键值对的键和值,都是任意的对象,但是键往往使用字符串
        //字典和数组都是存贮对象地址,
        //字典存储对象的地址没有顺序
        //key不能重复

2、获取键值对个数
        - (NSUInteger)count;

3、如何通过key获取对应的value(值是目的, 键是手段)
      - (id)objectForKey:(id)aKey;
        或者是:  dic[@“1”];

4、获取字典中所有的key
        -(NSArray *)allKeys;

5、获取字典中所有的值
        -(NSArray *)allValues;

6、获取值是anObject的所有的key
        -(NSArray *)allKeyForObject:(id)anObject;

7、如何遍历字典内容
        
    
    枚举器法:
    键的遍历:
      1)keyEnumerator消息
        作用:获取所有的key值
        NSEnumerator *emunerator = [dict keyEnumerator];
        id obj;
        while (obj = [emunerator nextObject]) {
            NSLog(@“%@“, obj);
        }

值得遍历
         objectEnumerator 消息
    
    快速枚举法:
    快速枚举法:得到的是键
        for (id key in dict)
        {
            NSLog(@“key — %@, value = %@, key, [dict                     objectForKey:obj]); // 得到了键就得到了值
        }

5.NSDictionary和NSArray的对比
       1)字典相对与数组的优点
         字典获取元素速度比数组快,原因是字典通过哈希算法得到每个元素具体的位置
       2)获取元素的方式
         数组通过下标获取指定元素的内容     objectAtIndex
         字典通过key来获取指定元素的内容    objectForKey  不能通过下标
            dict[@“1”]

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{ @autoreleasepool { /*
NSDictionary: 字典,用来存储数据
数据 是以键值对的方式存在 键(索引) --------- 值 1 = one;
2 = two;
3 = three; 键和值可以是任意的对象, 一般【键】都是以【字符串】的形式表示
字典的存储顺序,不是按照初始化的方法来存储,按照存储速度最快的方式
的方式来存储-----------哈希算法(散列的算法) 【注】键唯一,值可以不唯一 */ NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"two",@"2",@"three",@"3", @"one",@"1", nil];
NSLog(@"dict = %@", dict); NSDictionary *dict1 = [[NSDictionary alloc] initWithDictionary:dict]; NSString *objArr[] = {@"zhangfei",@"liubei",@"guanyu"};
NSString *keyArr[] = {@"xiaohei",@"xiaobai",@"xiaohong"};
NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objArr forKeys:keyArr count:3];
NSLog(@"dict2 = %@", dict2); //键不能相同,值可以相同
NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:@[@"zhangfei",@"liubei",@"guanyu",@"zhangfei"] forKeys:@[@"xiaohei",@"xiaobai",@"xiaohong",@"laosan"]];
NSLog(@"dict3 = %@", dict3); //____________常用的方法_____________________ //_______获取键值对的个数________
NSUInteger len = [dict3 count];
NSLog(@"len = %lu", len); //_______根据键获取值_键是手段,值才是目的____
//objectForKey:(id)key
id obj = [dict3 objectForKey:@"xiaohei"];
NSLog(@"obj = %@", obj); //可以使用 []
id obj2 = dict3[@"xiaohong"];
NSLog(@"obj2 = %@", obj2); //_______获取所有的key____________
NSArray *allKeys = [dict3 allKeys];
NSLog(@"allKeys = %@", allKeys); //_______获取所有的值_____________
NSArray *allObjects = [dict3 allValues];
NSLog(@"allObjects = %@", allObjects); //_______根据值获取所有的键_________
NSArray *allKeyForObj = [dict3 allKeysForObject:@"zhangfei"];
NSLog(@"allKeyForObj = %@", allKeyForObj); //_______遍历字典__________________
//___枚举器____既可以遍历key,也可以遍历value
NSEnumerator *keys = [dict3 keyEnumerator];
NSString *key = nil;
while (key = [keys nextObject]) {
NSLog(@"key-----%@, value------%@", key, dict3[key]);
} //枚举所有的值
NSEnumerator *values = [dict3 objectEnumerator];
id obj3 = nil;
while (obj3 = [values nextObject]) {
NSLog(@"value = %@", obj3);
} //_____快速枚举法______得到的是key____
for (id obj in dict3) {
NSLog(@"key---%@, value----%@", obj,dict3[obj]); } }
return 0;
}

============================
NSMutableDictionary
    1、NSMutableDictionary和NSDictionary的区别    
    2、如何创建
      1)dictionary消息
        作用:创建一个空的字典
      2)dictionaryWithObjects:forKeys: 消息
        作用:通过指定数组来创建一个字典对象
 
    3、增加键值对
      -(void)setObject:(id)anObject forKey:(id)akey;

备注:如果不存在键——添加
                        如果键已存在—--修改

4.可变字典的删除
      1)通过指定key删除一组键值对
        -(void)removeObjectForKey:(id)aKey;

2)通过指定的一个数组内容来删除相关的键值对
        -(void)removeObjectsForKeys:(NSArray *)keyArray;

3)删除字典中所有的键值对
        -(void)removeAllObjects;
    
    5、修改
        修改整个字典
        - (void)setDictionary;(NSDictionary *)otherDictionary;
        修改键值对
        - (void)setObject:(id)anObject forKey:(id)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{ @autoreleasepool {
// NSMutableDictionary 是 NSDictionary 的子类
//@[]
NSDictionary *dict = @{@"1": @"one", @"2":@"two",@"3":@"three"}; NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] initWithObjects:@[@"one",@"two"] forKeys:@[@"1",@"2"]]; //创建空字典
NSMutableDictionary *dict2 = [NSMutableDictionary dictionary]; NSLog(@"dict2 = %@", dict2); //_______添加键值对___________
[dict2 setObject:@"zhangsan" forKey:@"1"];
[dict2 setObject:@"lisi" forKey:@"2"];
[dict2 setObject:@"wangwu" forKey:@"3"];
NSLog(@"dict2 = %@", dict2); [dict2 setObject:@"zhaoping" forKey:@"6"]; [dict2 removeObjectForKey:@"1"]; //_______删除键值对_______________
[dict2 removeObjectForKey:@"1"];
NSLog(@"dict2 = %@", dict2); //将字典的key和数组相同的元素的键值对删除
[dict2 removeObjectsForKeys:@[@"2",@"5"]];
NSLog(@"dict2 = %@", dict2); [dict2 setObject:@"nimei" forKey:@"4"]; //_______改______set的键和已有的键相同_____
[dict2 setObject:@"laowu" forKey:@"3"];
NSLog(@"dict2 = %@", dict2); //__重置____
[dict2 setDictionary:dict];
NSLog(@"dict2 = %@", dict2); }
return 0;
}

/*************************************************************************

NSDictionary

****************************************************************************/

//内容可以是任意的对象指针 //内容是一些键值对 key value //必须成对出现 一个 key 对应一个 value //key 是唯一的 不能出现多个相同的 key

1.创建一个不可变字典(1)
NSDictionary*dict=[[NSDictionary
alloc]initWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three",@"4",
@"four",@"5",@"five", nil];//
创建一个不可变字典(2)
NSDictionary * dict1 = [NSDictionary dictionaryWithDictionary:dict];
创建一个不可变字典(3)
NSArray * values =[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];
NSArray*keys=[[NSArray
alloc]initWithObjects:@"one",@"two",@"three",@"four", nil];
NSDictionary* dict2 = [[NSDictionary alloc]initWithObjects:values forKeys:keys];

//键值对的个数
NSLog(@"count = %ld",[dict2 count]);

//查找 通过 key 找到对应值
NSLog(@"%@",[dict objectForKey:@"four"]);
词典类的存在就是为了解决在大量数据中查找方便,因为它是通过 key 直接找到
value 所以速度很快,避免一个个的遍历寻找造成的效率低下,善用字典类会帮
你的程序提速。

//创建 key 的枚举器
NSEnumerator * keyenumer = [dict keyEnumerator];
while (obj = [keyenumer nextObject]) {

NSLog(@"obj = %@",obj);
}

//快速枚举枚举的是 key
for (id od in dict) {

NSLog(@"od = %@",od);
}

/*******************************************************************************

NSMutableDictionary

*******************************************************************************

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

//创建可变字典

NSMutableDictionary*dict=[[NSMutableDictionary
alloc]initWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three",@"4",
@"four", nil];
NSMutableDictionary*dict1 =[NSMutableDictionary dictionaryWithCapacity:10] :
创建一个可变词典初始指定它的长度为 10.,动态的添加数据如果超过 10 这个
词典长度会自动增加,所以不用担心数组越界。

//增加 删除 修改
[dict setObject:@"5" forKey:@"five"];//字典中不存在@“five”key 那么就是增
加键值对
[dict setObject:@"7" forKey:@"one"];//字典中存在@“one”key 那么就是修改@
“one”对应的值
[dict removeObjectForKey:@"one"];//删除键值对
- (void)removeAllObjects;//删除所有键值对
- (void)removeObjectsForKeys:(NSArray *)keyArray;//删除keys
数组对应的键值对
- (void)setDictionary:(NSDictionary *)otherDictionary;//修
改字典

OC第四节——NSDictionary和NSMutableDictionary的更多相关文章

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

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

  2. 词典对象 NSDictionary与NSMutableDictionary

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

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

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

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

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

  5. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  6. 黑马程序员-NSDictionary和NSMutableDictionary

    NSDictionary和NSMutableDictionary:通过key和value进行对应,进行存储元素,能够方便提取所需的元素.key是不能够重复出现,但是value能够重复出现.NSDict ...

  7. NSDictionary、NSMutableDictionary的基本用法

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

  8. Centos7 install Openstack - (第四节)添加计算服务(Nova)

    Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...

  9. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

随机推荐

  1. lbs(查看附近的人),看看社交软件如何实现查看附近的人

    最近在做一款移动端棋牌游戏,为了进一步提高用户体验.拉近玩家的距离,我们决定在游戏中加入好友功能,而对于体验好友功能的玩家来说,要是玩牌的时候可以看看附近都有谁在玩牌,跟他们交流交流玩牌心得什么的无疑 ...

  2. 踩的python列表及for循环一个坑儿

    一个列表循环的问题,困扰了半个小时,我也是醉了,值得深思 下面开始提需求: 一个列表mylist = [{'tag':1,'num' :5000},{'tag':2,num: 6000},{'tag' ...

  3. MOOCULUS微积分-2: 数列与级数学习笔记 4. Alternating series

    此课程(MOOCULUS-2 "Sequences and Series")由Ohio State University于2014年在Coursera平台讲授. PDF格式教材下载 ...

  4. 第六次作业——利用MFC实现计算器图形界面以及简单四则运算表达式批处理

    参考资料:      1.MFC响应键盘      2.计算器实例      3.MFC文件对话框      4.MFCUpdateData()函数的使用      5.MFC教程      6.wi ...

  5. PhpStorm 默认快捷键

    ctrl+j            插入活动代码提示ctrl+alt+t        当前位置插入环绕代码alt+insert        生成代码菜单Shift + Enter 新一行ctrl+ ...

  6. 多线程引发OutOfMemoryException

    现象: 内存是绝对没有问题的,3g内存,发生异常时,任务管理器里显示,可用内存还有1G多!不知道什么原因! int i=0; while ((i++) < 2000) { try { Threa ...

  7. Struts2(一)入门及工作原理

    Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork和Struts1.x 两种 web 框架. Apache Struts2与S ...

  8. uC/OS-II队列(OS_q)块

    /*************************************************************************************************** ...

  9. asp.net与Matlab类型转换(待补全)

    上上篇的博客已经提到如何配置环境,即如何在asp.net中调用matlab生成的dll文件.这篇博客打算做个笔记,那就是matlab和C#数据类型如何转换.随着需求的增加,我会不断增加新的类型转换. ...

  10. IP-Address TextBox

    http://www.codeproject.com/Articles/4693/IP-Address-TextBox 可以下载试用效果.个人感觉功能很强大,但输入时让人不太舒服.可以参考. ntro ...