OC中的字典
来源:互联网 发布:vb的picturebox属性 编辑:程序博客网 时间:2024/04/29 17:19
NSDictionary字典就是关键字(键)及其定义所构成的集合。字典在给定的关键字下存储一个数值,这个关键字(键)通常是一个NSString类型的字符串,存储的这个数值可以是Object-C里的任意类型的对象。然后你就可以使用这个关键字来找到其对应的值。
字典和数组一样,也分为不可变字典(NSDictionary)和可变字典(NSMutableDictionary)。
NSDictionary
不可变字典的创建及访问:
/* 字典:NSDictionary NSMutableDictionary 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",@"GZ",@"address", nil]; //字典里面存放的元素都要是对象类型才行。如果是基本数据类型,要先把基本数据类型进行封装,然后再放到这些集合中去。比如不能把@25换成25放到字典里去 //通过字典创建一个字典 NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4]; NSLog(@"%@",dictionary5); //使用新语法创建字典 NSDictionary *dictionary6 = @{}; //新语法创建只有一个键值对的字典,与dictionary4创建方式顺序相反 NSDictionary *dictionary7 = @{@"name":@"Rick"}; //新语法创建多个键值对的字典 NSDictionary *dictionary8 = @{@"name":@"Rick",@"age":@25,@"address":@"GZ"}; NSLog(@"%@",dictionary8); //从本地读取文件 NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@"http://www.baidu.com"]; //从网络读取字典 NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]]; //字典中键值对的数量 NSUInteger count = [dictionary4 count]; NSLog(@"%lu",count); //如何访问字典 //通过key访问字典中对应的值 NSString *name = [dictionary4 objectForKey:@"name"]; //新语法 NSString *newName = dictionary4[@"name"]; //如何遍历字典中所有的key和value //表示字典中所有的key NSArray *keyArray = dictionary4.allKeys; NSArray *valueArray = dictionary4.allValues; //打印key = value,for循环// id key,value;// for (int i = 0; i < dictionary4.count; i++) {// key = [keyArray objectAtIndex:i];// value = [dictionary4 objectForKey:key];// NSLog(@"%@:%@",key,value);// } for (int i = 0; i < dictionary4.count; i++) { //注意‘[]’的使用,数组加‘[]’就是代表数组里的元素 NSLog(@"%@:%@",keyArray[i],valueArray[i]); } //快速枚举 for (NSString *key in keyArray) { NSLog(@"%@:%@",key,dictionary4[key]);//? } //使用枚举器遍历 NSEnumerator *enumerator = [keyArray objectEnumerator]; id key; while (key = [enumerator nextObject]) { NSLog(@"%@:%@",key,dictionary4[key]); } NSDictionary *dictionary = @{@"name":@"Rick",@"age":@"25",@"address":@"GZ",@"name":@"Jack"}; for (NSString *str in dictionary.allKeys) { NSLog(@"%@=%@",str,dictionary[str]); } //注意:在字典中键值对是无序的,如果有两个相同的键值对只会打印一个
NSMutableDictionary
1.可变字典的创建
/* NSMutableDictionary 可变字典 */ //1.初始化方式 //创建一个空的字典 NSMutableDictionary *mDictionary1 = [NSMutableDictionary dictionary]; //创建一个有一个键值对的可变字典 NSMutableDictionary *mDictionary2 = [NSMutableDictionary dictionaryWithObject:@"Rick" forKey:@"name"]; // NSMutableDictionary *mDictionary3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@"age",@"25",@"address",@"GZ", nil]; //通过另一个字典创建一个字典 NSMutableDictionary *mDictionary4 = [NSMutableDictionary dictionaryWithDictionary:mDictionary3];// mDictionary3.allKeys 访问所有键// mDictionary3.allValues 访问所有值 //可变字典独有的初始化方法 NSMutableDictionary *mDictionary5 = [NSMutableDictionary dictionaryWithCapacity:10]; //从本地读取字典 NSMutableDictionary *mDictionary6 = [NSMutableDictionary dictionaryWithContentsOfFile:@""]; //从网络读取字典 NSMutableDictionary *mDictionary7 = [NSMutableDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]];
2.对可变字典的操作
//操作字典 //增 [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 *mDictionary8 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address",@"Rick",@"name2",@"Rick",@"name3",nil];// for (int i = 0; i < mDictionary8.count; i++) {// // if ([mDictionary8.allValues[i] isEqual: @"Rick"]) {// NSLog(@"%@",mDictionary8.allKeys[i]);// }// else if ([mDictionary8.allValues[i] isEqual: @25]) {// [NSString stringWithFormat:@""]// NSLog(@"%@");// }// // NSArray *keyArray1 = mDictionary8.allKeys; for (NSString *key in keyArray1) { NSString *string; NSLog(@"%@",mDictionary8[key]); //返回一个BOOL值,YES or NO if ([mDictionary8[key] isKindOfClass:[NSNumber class]]) { int age = [mDictionary8[key] intValue]; mDictionary8[key] = [NSString stringWithFormat:@"%d",age]; } else{ string = mDictionary8[key]; } if ([string isEqualToString:@"Rick"]) { NSLog(@"key = %@",key); } }
0 0
- OC语言中的字典
- OC中的可变字典
- OC中的字典NSDicitionary
- OC中的字典dictionary
- OC中的字典
- OC菜鸟成长记-OC中的字典
- OC中的不可变字典
- OC中的数组、字典、集合
- OC中的字典以及常用方法
- OC中的数组、字典和集合解析
- oc字典
- OC 字典
- 【OC】字典
- OC 字典
- OC-字典
- OC字典
- OC- 字典
- OC字典
- hdu 5818 2016 Multi-University Training Contest 7(模拟)
- 字符串类型题目
- 谷歌面试题:从无穷尽的流中随机的选取1000个关键字(蓄水池抽样)
- mysql 学习笔记
- 基于surface机制的surfaceflinger启动过程
- OC中的字典
- Android标题栏的几种解决思路
- 边界标志填充算法(计算机图形学)
- 关于NSEnumerator
- Android 最高效率的画出圆形图片
- 微信开发第一篇之自定义菜单
- Qt5.6跨平台问题
- 判断cpu是大小端
- Mybatis Generator最完整配置详解