今天来看一下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

运行结果:

打印结果是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类,他们的用途在后面非常关键,经常被用到。

OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类的更多相关文章

  1. (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

    前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...

  2. OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

    1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于J ...

  3. (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类

    昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...

  4. (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...

  5. (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...

  6. (转载)OC学习篇之---Foundation框架中的NSObject对象

    前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...

  7. OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArr ...

  8. OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象

    今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...

  9. OC学习篇之---Foundation框架中的NSObject对象

    从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现 ...

随机推荐

  1. android 图片特效处理之 光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  2. API集合开发文档

    百度翻译api https://www.cnblogs.com/DevilX5/p/7079470.html 实现QQ第三方登录.网站接入 http://blog.csdn.net/u01067894 ...

  3. passwd---设置用户密码的相关信息

    passwd命令   passwd命令用于设置用户的认证信息,包括用户密码.密码过期时间等.系统管理者则能用它管理系统用户的密码.只有管理者可以指定用户名称,一般用户只能变更自己的密码. 语法 pas ...

  4. Java7与G1

    Lucene 4.8開始不支持java6了,所以在下次版本号升级之前我们要先升级至java7. 我使用1/3的全量索引(7.3G).进行測试,20并发,40万请求: sun jdk 1.6.0_26 ...

  5. android 弹幕评论效果

    纯粹依照自己的想法仿照b站的弹幕写的一个demo,不知道正确的姿势怎么样的. demo下载地址 首先.一条弹幕就是一个textview public abstract class Danmu exte ...

  6. MyEclipse 2016 安装/破解

    MyEclipse2016 C1 已经出现了!感觉好像不错的样子! 不多说了,开整... 好熟悉的界面,点击Next! 如上图标注1所示,请修改安装目录! 根据自己的喜好可以选择不同的版本,也可以安装 ...

  7. 洛谷P3273 [SCOI2011]棘手的操作

    题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作:U x y: 加一条边,连接第x个节点和第y个节点A1 x v: 将第x个节点的权 ...

  8. golang sync.RWMutex

    sync.RWMutex package main import ( "fmt" "runtime" "sync" ) func click ...

  9. MFC中对话框的各种消息触发时间

    小结:WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个状态肯定是在调用ShowWindows()显示窗口之前.WM_WM_IN ...

  10. 【天气APP】之桌面时钟witget组件

    桌面时钟之组件开发: 整个流程例如以下: 下载地址demo:www.github.com/xufeifandj service+组件+广播进行后台实时更新时间 (一)开机广播监听开机启动service ...