OC学习日记09-字典
来源:互联网 发布:美国反恐战争数据图 编辑:程序博客网 时间:2024/06/07 04:46
字典
前言
字典其实在理解了数组之上去看的话,是非常容易的。数组是一个一个数出现的,而字典是一对一对“数”出现的,这个“一对数”就是键值对。但是我们要注意,字典是集合,集合是无序的。而其实还有一个类型叫set集合,它也是无序的,因为它是单值无重复的集合。而且他们都有可变和不可变之分,我们把字符串、数组、字典还有set集合一起对比着学,就会容易记住了。
不可变字典 NSDictionary
1.概念:
字典是关键字“key”及其定义的值(value)所构成的集合,即它是由key-value组成的键值对的集合。‘key’一般是‘NSString’类型的,‘value’是OC中任意对象。对于字典来讲,我们就是通过‘key’来访问‘value’。
2.为什么在有了数组之后,还需要字典?
在有大量的数据或频繁的查找的时候,使用字典效率更高。因为字典采用键查询的优化查询方式。
初始化
创建一个空的字典
NSDictionary *dictionary1=[[NSDictionary alloc]init]; NSDictionary *dictionary2=[NSDictionary dictionary]; NSDictionary *dictionary3=[NSDictionary dictionaryWithObject:@"Rick" forKey:@"name"];
创建一个多个键值对的字典
NSDictionary *dictionary4=[NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"G2",@"address",nil];
字典里面存放的元素都要是对象类型才可以,如果是基本数据类型,要先把基本数据类型进行封装,然后再放到这些集合中去。
NSDictionary *dictionary5=[NSDictionary dictionaryWithDictionary:dictionary4]; NSLog(@"%@",dictionary5);
新语法创建字典
NSDictionary *dictionary6=@{};
新语法创建只有一个键值对的字典。
NSDictionary *dictionary7=@{@"name":@"Rick"};
新语法创建只有一个键值对的字典。
NSDictionary *dictionary8=@{@"name":@"Rick",@"age":@25,@"address":@"G2p"};
从本地读取字典
NSDictionary *dictionary9=[NSDictionary dictionaryWithContentsOfFile:@""];
从网络读取字典
NSDictionary *dictionary10=[NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
字典中键值对的数量
NSUInteger count=[dictionary4 count];
如何访问字典?
通过key访问字体中对应的值
NSString *name=[dictionary4 objectForKey:@"name"];
新语法
NSString *newname= dictionary4[@"name"];
如何访问字典中的key/value
表示字典中所有的key
NSArray *keysArray=dictionary4.allKeys; NSArray *valuesArray=dictionary4.allValues; for (int i=0; i<dictionary4.count; i++) { NSLog(@"%@ = %@",keysArray[i],valuesArray[i]); } //forin for (NSString *key in keysArray) { NSLog(@"%@ = %@",key,dictionary4[key]); }
使用枚举器遍历
NSEnumerator *enumerator =[keysArray objectEnumerator]; id key; while(key = [enumerator nextObject]){ NSLog(@"%@ =%@",key,dictionary4[key]); } NSDictionary *dictionary=@{@"name":@"Rick",@"age":@25,@"address":@"G2p" ,@"name":@"Jack"}; for (NSString *str in dictionary.allKeys) { NSLog(@"%@ = %@",str,dictionary[str]); }
可变字典 NSMutableDictionary
1.初始化
创建一个空的字典
NSMutableDictionary *mDictionary1 =[NSMutableDictionary dictionary];
创建一个有一个键值对的可变字典
NSMutableDictionary *mDictionary2=[NSMutableDictionary dictionaryWithObject:@"Rick" forKey:@"name"]; NSMutableDictionary *mDictionary3=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address", nil];
通过一个字典创建一个字典
NSMutableDictionary *mDictionary4=[NSMutableDictionary dictionaryWithDictionary:mDictionary3]; //mDictionary4.allKeys //mDictionary4.allValues
可变字典独有的初始化方法
NSMutableDictionary *mDictionary5=[NSMutableDictionary dictionaryWithCapacity:10];
从本地读取字典
NSMutableDictionary *mDictionary6=[NSMutableDictionary dictionaryWithContentsOfFile:@""];
从网络读取字典
NSMutableDictionary *mDictionary7=[NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]];
操作字典
增
[mDictionary5 setValue:@"Rick" forKey:@"name"]; [mDictionary5 setValue:@25 forKey:@"age"];
改
(如果原来的字典中已经有了akey这个值,那么这次新加的值就会覆盖原来的关键字(键)akey对应的值。还是一样的命令,后面的值会把前面的覆盖掉)
[mDictionary5 setValue:@"Jack" forKey:@"name"]; mDictionary5[@"name"]=@"Leo";
删除
删除指定key的对象
[mDictionary5 removeObjectForKey:@"name"];
删除所有的对象
[mDictionary5 removeAllObjects];
找出相同值的键
NSMutableDictionary *mDic8=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name", @25,@"age", @"GZ",@"address", @"Rick",@"name2", @"Rick",@"name3",nil]; NSArray *keysArray=mDic8.allKeys; NSArray *valuesArray=mDic8.allValues;
方法一
for(int i=0;i<mDic8.count;i++){ if(valuesArray[1] ==valuesArray[i]){ NSLog(@"%@",keysArray[i]); } if([valuesArray[i] isKindOfClass:[NSNumber class]]){ int age=[valuesArray[i] intValue]; mDic8[@"name"]=[NSString stringWithFormat:@"%d",age]; } }
方法二
for (NSString *key in keysArray) { NSString *string; if([mDic8[key] isKindOfClass:[NSNumber class]]){ int age=[mDic8[key] intValue]; mDic8[key]=[NSString stringWithFormat:@"%d",age]; } else{ string =mDic8[key]; } if([string isEqualToString:@"Rick"]){ NSLog(@""); } }
0 0
- OC学习日记09-字典
- [oc学习日记]字典
- OC学习:OC字典NSDictionary
- C#学习日记 字典
- OC学习日记01
- OC学习----字典
- [oc学习日记]代理模式
- OC学习日记07-数组
- OC学习日记013-协议
- OC学习,字典的整理
- OC学习--字典的使用
- OC学习 ----- 字典转模型
- OC篇学习-字典
- 算法学习日记 字典法排序
- 黑马程序员:OC学习日记之self
- 黑马程序员:OC学习日记之Foundation
- 黑马程序员:OC学习日记之block
- [oc学习日记]单例模式
- zzuliOJ 1913:小火山的计算能力(栈+水题)
- UVALive 7324ASCII Addition
- 模拟鼠标按下
- Scroller的作用
- win7 64位下python2.7安装scipy科学计算库
- OC学习日记09-字典
- Codeforces 589B Layer Cake(两次排序)
- Java线程问题实现打印数字字母
- Java字符串常用类
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- c++教程(八:Functions)
- php中的依赖注入
- Android 中线程间通信原理分析:Looper, MessageQueue, Handler
- 【poj2187】 Beauty Contest