[OC Foundation框架 - 10] NSDictionary

通过唯一的key找到相应的value,类似于Map

NSDictionary是不可变的
 
1.创建
复制代码
 1 void dicCreate()
 2 {
 3     //Immutable
 4 //    NSDictionary *dic = [NSDictionary dictionary];
 5    
 6     NSDictionary *dic = [NSDictionary dictionaryWithObject:@"Simon" forKey:@"name"];
 7    
 8     dic = [NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil];
 9    
10     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
11     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
12     dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
13    
14     NSLog(@"%@", dic);
15    
16 }
复制代码
 
集中批量创建字典
1         NSDictionary *d11_1 = @{@"姓名":@"张三", @"年龄":@"21", @"性别":@"男"};
 
若存在同名的元素,采用最先定义的,多余的元素不会被计数
不允许nil作为键值
NSMutableDictioinary不能使用此方法,因为返回的是一个NSDictionary
 
 
2.基本操作
(1)键值对数量
(2)比较
(3)取值
(4)IO操作
复制代码
 1 void dicUse()
 2 {
 3     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
 4     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
 5     NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
 6    
 7     NSLog(@"%@", [dic objectForKey:@"k1"]);
 8 }
 9  
10 void dicUse2()
11 {
12     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v1", @"v2", nil];
13     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
14     NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
15    
16     NSArray *keys2 = [dic allKeys];
17     NSLog(@"%@", keys2);
18    
19     NSArray *keys3 = [dic allKeysForObject:@"v1"];
20     NSLog(@"%@", keys3);
21    
22    
23     NSArray *objs2 = [dic objectsForKeys:[NSArray arrayWithObjects:@"k1",@"k2",@"k4",nil] notFoundMarker:@"not found"];
24     NSLog(@"%@", objs2);
25 }
复制代码
 
3.遍历
复制代码
 1 void dicLoop()
 2 {
 3     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
 4     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
 5     NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
 6    
 7     //Loop all keys in dictionary
 8     for (id key in dic)
 9     {
10         id value = [dic objectForKey:key];
11         NSLog(@"%@ = %@", key, value);
12     }
13 }
复制代码
 
4.迭代器
复制代码
 1 void dicEnumerator()
 2 {
 3     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
 4     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
 5     NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
 6    
 7     //key enumerator
 8     NSEnumerator *enumerator = [dic keyEnumerator];
 9     id key =nil;
10     while (key = [enumerator nextObject])
11     {
12         id value = [dic objectForKey:key];
13         NSLog(@"%@ = %@", key, value);
14     }
15 }
复制代码
 
5.block迭代
复制代码
 1 void dicBlockLoop()
 2 {
 3     NSArray *objs = [NSArray arrayWithObjects:@"v1", @"v2", @"v3", nil];
 4     NSArray *keys = [NSArray arrayWithObjects:@"k1", @"k2", @"k3", nil];
 5     NSDictionary *dic = [NSDictionary dictionaryWithObjects:objs forKeys:keys];
 6    
 7     [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
 8         NSLog(@"%@ - %@", key, obj);
 9     }];
10 }
复制代码
 
6.内存管理
复制代码
 1 void memoryManage()
 2 {
 3     Student *stu1 = [Student studentWithName:@"Simon"];
 4     Student *stu2 = [Student studentWithName:@"Joke"];
 5     Student *stu3 = [Student studentWithName:@"Man"];
 6     NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:stu1,@"stu1",
 7                                                                     stu2, @"stu2",
 8                                                                     stu3, @"stu3", nil];
 9    
10    
11      //When dictionary is destroyed, the keys & objects will be released one time
12     NSLog(@"stu1 before dic release:%zi", stu1.retainCount);
13 }
复制代码
 
7.取出键、值
(1)
1         NSArray *da = [d allKeys];
(2)
1         NSLog(@"%@", d[@"6"]);
 
8.NSDictionary是无序的,取出来的值不会按照存入的顺序排列
复制代码
1         NSMutableDictionary *d = [NSMutableDictionary dictionary];
2         for (int i=0; i<100; i++)
3         {
4             [d setObject:@"abc" forKey:[NSString stringWithFormat:@"%d", i]];
5         }
6        
7         NSLog(@"%@", d);
复制代码
 
out:
2014-11-19 02:36:25.850 03-NSArray[5171:303] {
    0 = abc;
    1 = abc;
    10 = abc;
    11 = abc;
...
 
posted @ 2015-05-18 21:05  *新星月-倪新生*  阅读(211)  评论(0编辑  收藏  举报