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

一、NSDictionary类

  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. #import <Foundation/Foundation.h>
  9. //由键值对key-value构成的数据集合
  10. int main(int argc, const charchar * argv[]) {
  11. @autoreleasepool {
  12. //1.---------------------字典的创建
  13. NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];
  14. NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];
  15. //第一个元素:key:@"zhang" value:array1
  16. //第二个元素:key:@"li"  value:array2
  17. NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];
  18. NSLog(@"%@",dict);
  19. //存放一个元素
  20. NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];
  21. //2.---------------------获取所有的key
  22. NSArray *allKeys = [dict allKeys];
  23. //3.---------------------获取所有的value
  24. //可能为二维数组
  25. NSArray *allValues = [dict allValues];
  26. //4.---------------------通过key获取value
  27. NSArray *values = [dict objectForKey:@"zhang"];
  28. //5.---------------------优化的语法
  29. NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
  30. NSLog(@"%@",dict3);
  31. NSArray *array4 = dict3[@"zhang"];
  32. }
  33. return 0;
  34. }

1、创建方法

  1. //1.---------------------字典的创建
  2. NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];
  3. NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];
  4. //第一个元素:key:@"zhang" value:array1
  5. //第二个元素:key:@"li"  value:array2
  6. NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];
  7. NSLog(@"%@",dict);

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

运行结果:

OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类-LMLPHP

打印结果是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. NSArray *array4 = dict3[@"zhang"];

二、NSMutableDictionary类

  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. #import <Foundation/Foundation.h>
  9. //可变字典
  10. int main(int argc, const charchar * argv[]) {
  11. @autoreleasepool {
  12. //1.-------------创建一个可变字典,大小为3
  13. NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];
  14. NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil nil];
  15. //2.-------------添加元素
  16. [md1 setObject:array1 forKey:@"zhang"];
  17. NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
  18. [md2 addEntriesFromDictionary:md1];
  19. //3.-------------删除元素
  20. [md1 removeObjectForKey:@"zhang"];//以key删除
  21. [md1 removeAllObjects];//删除所有元素
  22. [md1 removeObjectsForKeys:array1];//以value删除
  23. //4.-------------循环遍历字典
  24. //快速遍历
  25. for (NSString *key in md1) {
  26. NSArray *values = [md1 objectForKey:key];
  27. for(NSString *v in values){
  28. NSLog(@"%@",v);
  29. }
  30. }
  31. //普通遍历
  32. NSArray *allKey = [md1 allKeys];
  33. for(int i=0;i<allKey.count;i++){
  34. NSArray *value = [md1 objectForKey:allKey[i]];
  35. }
  36. //字典是无序的
  37. }
  38. return 0;
  39. }

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

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. NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
  4. [md2 addEntriesFromDictionary:md1];

3、删除元素

  1. //3.-------------删除元素
  2. [md1 removeObjectForKey:@"zhang"];//以key删除
  3. [md1 removeAllObjects];//删除所有元素
  4. [md1 removeObjectsForKeys:array1];//以value删除

4、遍历字典

  1. //4.-------------循环遍历字典
  2. //快速遍历
  3. for (NSString *key in md1) {
  4. NSArray *values = [md1 objectForKey:key];
  5. for(NSString *v in values){
  6. NSLog(@"%@",v);
  7. }
  8. }
  9. //普通遍历
  10. NSArray *allKey = [md1 allKeys];
  11. for(int i=0;i<allKey.count;i++){
  12. NSArray *value = [md1 objectForKey:allKey[i]];
  13. }

总结

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

05-02 16:43