OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的。

一、NSDirctionary类

 1 //  

 2 //  main.m  

 3 //  19_NSDictionary  

 4 //  

 5 //  Created by jiangwei on 14-10-12.  

 6 //  Copyright (c) 2014年 jiangwei. All rights reserved.  

 7 //  

 8   

 9 #import <Foundation/Foundation.h>  

10   

11 //由键值对key-value构成的数据集合  

12 int main(int argc, const charchar * argv[]) {  

13     @autoreleasepool {  

14         //1.---------------------字典的创建  

15         NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];  

16         NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];  

17           

18         //第一个元素:key:@"zhang" value:array1  

19         //第二个元素:key:@"li"  value:array2  

20         NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];  

21         NSLog(@"%@",dict);  

22           

23         //存放一个元素  

24         NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];  

25           

26           

27         //2.---------------------获取所有的key  

28         NSArray *allKeys = [dict allKeys];  

29           

30           

31         //3.---------------------获取所有的value  

32         //可能为二维数组  

33         NSArray *allValues = [dict allValues];  

34           

35           

36         //4.---------------------通过key获取value  

37         NSArray *values = [dict objectForKey:@"zhang"];  

38           

39           

40         //5.---------------------优化的语法  

41         NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};  

42         NSLog(@"%@",dict3);  

43           

44         NSArray *array4 = dict3[@"zhang"];  

45           

46           

47     }  

48     return 0;  

49 }  

1、创建方法

1 //1.---------------------字典的创建  

2 NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];  

3 NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];  

4   

5 //第一个元素:key:@"zhang" value:array1  

6 //第二个元素:key:@"li"  value:array2  

7 NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];  

8 NSLog(@"%@",dict); 

我们可以看到,NSDirctionary类的创建是基于NSArray的,然后其他的和Java中的Map就差不多了,一般是key-value的形式,当然这里也是需要注意结尾是:nil

运行结果:



打印结果是key-value的样式

2、添加元素

1 //存放一个元素  

2 NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"]; 

3、获取所有元素的key

1 //2.---------------------获取所有的key  

2 NSArray *allKeys = [dict allKeys];

4、获取所有元素的value

1 //3.---------------------获取所有的value  

2 //可能为二维数组  

3 NSArray *allValues = [dict allValues];

5、通过key获取value

1 //4.---------------------通过key获取value  

2 NSArray *values = [dict objectForKey:@"zhang"]; 

6、NSDirctionary的快速创建方式和访问方式

1 //5.---------------------优化的语法  

2 NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};  

3 NSLog(@"%@",dict3);  

4   

5 NSArray *array4 = dict3[@"zhang"]; 

 

二、NSMutableDirctionary类

 1 //  

 2 //  main.m  

 3 //  20_NSMutableDictionary  

 4 //  

 5 //  Created by jiangwei on 14-10-12.  

 6 //  Copyright (c) 2014年 jiangwei. All rights reserved.  

 7 //  

 8   

 9 #import <Foundation/Foundation.h>  

10   

11 //可变字典  

12 int main(int argc, const charchar * argv[]) {  

13     @autoreleasepool {  

14         //1.-------------创建一个可变字典,大小为3  

15         NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];  

16         NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil nil];  

17           

18           

19         //2.-------------添加元素  

20         [md1 setObject:array1 forKey:@"zhang"];  

21           

22         NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];  

23         [md2 addEntriesFromDictionary:md1];  

24           

25           

26         //3.-------------删除元素  

27         [md1 removeObjectForKey:@"zhang"];//以key删除  

28         [md1 removeAllObjects];//删除所有元素  

29         [md1 removeObjectsForKeys:array1];//以value删除  

30           

31           

32         //4.-------------循环遍历字典  

33         //快速遍历  

34         for (NSString *key in md1) {  

35             NSArray *values = [md1 objectForKey:key];  

36             for(NSString *v in values){  

37                 NSLog(@"%@",v);  

38             }  

39         }  

40           

41         //普通遍历  

42         NSArray *allKey = [md1 allKeys];  

43         for(int i=0;i<allKey.count;i++){  

44             NSArray *value = [md1 objectForKey:allKey[i]];  

45         }  

46           

47           

48         //字典是无序的  

49           

50           

51     }  

52     return 0;  

53 }  

之前的NSDirctionary类是不可变字典,同样的OC中也有对应的可变字典:NSMutableDirctionary。

1、创建可变字典

1 //1.-------------创建一个可变字典,大小为3  

2 NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];  

3 NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil nil]; 
 

创建一个可变字典,可以指定其大小,当然当容量满的之后,他回自动扩容。

2、添加元素

1 //2.-------------添加元素  

2 [md1 setObject:array1 forKey:@"zhang"];  

3   

4 NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];  

5 [md2 addEntriesFromDictionary:md1]; 

3、删除元素

1 //3.-------------删除元素  

2 [md1 removeObjectForKey:@"zhang"];//以key删除  

3 [md1 removeAllObjects];//删除所有元素  

4 [md1 removeObjectsForKeys:array1];//以value删除

4、遍历字典

//4.-------------循环遍历字典  

//快速遍历  

for (NSString *key in md1) {  

    NSArray *values = [md1 objectForKey:key];  

    for(NSString *v in values){  

        NSLog(@"%@",v);  

    }  

}  

  

//普通遍历  

NSArray *allKey = [md1 allKeys];  

for(int i=0;i<allKey.count;i++){  

    NSArray *value = [md1 objectForKey:allKey[i]];  

}  

 

总结

这一篇文章就介绍了OC中的NSDirctionary类和NSMutableDirctionary类,他们的用途在后面非常关键,经常被用到。

你可能感兴趣的:(table)