Objective-C语言——NSDictionary不可变字典
2015-12-16 09:43
597 查看
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 字典 NSDictionary / NSMutableDictionary 1.概念:字典是关键字'key'及其定义的值'value'所构成的集合,即它是由key-value组成的键值对的集合。通常来讲,'key'一般是'NSString'类型的,'value'是OC中任意对象。对于字典来讲,我们就是通过'key'来访问'value'。 2.为什么在有了数组后,还需要字典?在由大量的数据或者频繁查找信息,使用字典效率更高。因为字典是采用键查询的优化存储方法的。 3.在OC中我们使用'NSDictionary' 和 'NSMutableDictionary'来表示字典。其中'NSMutableDictionary' 是 'NSDictionary'的子类 */ //初始化 //创建一个空的字典 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]; //字典里面存放的元素都要是对象类型才行。如果是基本数据类型,要先把这些基本数据类型进行封装,然后在放到这些集合里。 //value在前,key 在后,value 和 key 要成双出现 NSLog(@"dictionary4 = %@",dictionary4); //注意:在字典中键值是无序的 //根据一个字典创建一个字典 NSDictionary *dictionary5 = [NSDictionary dictionaryWithDictionary:dictionary4]; NSLog(@"dictionary5 = %@",dictionary5); //新语法创建字典 NSDictionary *dictionary6 = @{}; //新语法创建一个键值对 NSDictionary *dictionary7 = @{@"name":@"Rick"}; //新语法创建多个键值对 NSDictionary *dictionary8 = @{@"name":@"Rick",@"age":@25,@"address":@"GZ"}; NSLog(@"dictionary8 = %@",dictionary8); //从本地读取字典 NSDictionary *dictionary9 = [NSDictionary dictionaryWithContentsOfFile:@""]; //从网络读取字典 NSDictionary *dictionary10 = [NSDictionary dictionaryWithContentsOfURL:[NSURL URLWithString:@""]]; //字典中键值对的数量 NSUInteger count = dictionary4.count; // NSLog(@"count = %lu",count); //如何访问字典 //通过key访问字典中对应的值 NSString *name = [dictionary4 objectForKey:@"name"]; NSLog(@"name = %@",name); //新语法 NSString *newName = dictionary4[@"name"]; NSLog(@"newName = %@",newName); //如何遍历字典中所有的值 //表示字典中所有的key NSArray *keysArray = dictionary4.allKeys; NSLog(@"keysArray = %@",keysArray); //字典中所有的value NSArray *valuesArray = dictionary4.allValues; NSLog(@"valuesArray = %@",valuesArray); //使用for循环来打印 for (int i = 0; i < valuesArray.count; i++) { // NSLog(@"%@ = %@",keysArray[i],valuesArray[i]); // NSLog(@"%@ = %@",keysArray[i],[dictionary4 objectForKey:keysArray[i]]); NSLog(@"%@ = %@",keysArray[i],dictionary4[keysArray[i]]); } //使用快速枚举 for (NSString *key in keysArray) { // NSLog(@"%@ = %@",key,[dictionary4 objectForKey:key]); NSLog(@"%@ = %@",key,dictionary4[key]); } //使用枚举器遍历 NSEnumerator *enumerator = [keysArray objectEnumerator]; NSString *key; while (key = [enumerator nextObject]) { NSLog(@"%@ = %@",key,dictionary4[key]); } //在不可变字典中不能存储相同的key,如果相同的key,则只会打印一个key对应的value NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Rick",@"name",@25,@"age",@"GZ",@"address",@"Jack",@"name", nil]; NSLog(@"------------------"); for (NSString *key in [dictionary allKeys]) { NSLog(@"%@ = %@",key,dictionary[key]); } } return 0; }
运行结果
2015-12-16 09:51:45.148 OC_06_01[7024:252081] dictionary4 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary5 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.149 OC_06_01[7024:252081] dictionary8 = {
address = GZ;
age = 25;
name = Rick;
}
2015-12-16 09:51:45.256 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.257 OC_06_01[7024:252081] newName = Rick
2015-12-16 09:51:45.257 OC_06_01[7024:252081] keysArray = (
name,
age,
address
)
2015-12-16 09:51:45.258 OC_06_01[7024:252081] valuesArray = (
Rick,
25,
GZ
)
2015-12-16 09:51:45.258 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.258 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.259 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.259 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.259 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ
2015-12-16 09:51:45.260 OC_06_01[7024:252081] ------------------
2015-12-16 09:51:45.260 OC_06_01[7024:252081] age = 25
2015-12-16 09:51:45.260 OC_06_01[7024:252081] name = Rick
2015-12-16 09:51:45.260 OC_06_01[7024:252081] address = GZ
Program ended with exit code: 0
相关文章推荐
- Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
- object-c画笔的简单实现
- object-c画笔的简单实现
- Nullability and Objective-C
- Spring MVC 接收json自动转换JSONObject
- Object C中创建线程的方法有NSThread,GCD, NSOperation
- Objective-c CoreData
- Objective-C中的内存管理
- CSS Object Model View整理
- org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread
- Objective-C 字符串一 "不可变字符串"
- Objective-C 字符串二 "可变字符串"
- (Foundation)NSObject 、 NSString 、 NSMutableString
- Objective-c---分类 、 扩展 、 ARC
- Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量
- Objective-C--- 多态 、 协议
- Objective-C对象初始化 、 实例方法和参数 、 类方法 、 工厂方法 、 单例模式
- Objective-C----MRC内存管理 、 自动释放池 、 面向对象三大特性及封装 、 继承 、 组合与聚合
- Objective-C对象初始化 、 实例方法和参数 、 类方法 、 工厂方法 、 单例模式
- Objective-C语言介绍 、 Objc与C语言 、 面向对象编程 、 类和对象 、 属性和方法 、 属性和实例变量