今天来看一下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. Handle-postDelayed 延迟操作

    今天在工作的时候,遇到了一个方法,是关于Handle来实现延时操作的,自己写了一个小demo,学习总结如下 xml <?xml version="1.0" encoding= ...

  2. 什么时候用button,什么时候用a标签

    什么时候用button,什么时候用a标签 一.问题 能实现链接功能的标签一般就a标签,button标签,input submit标签 input submit肯定是提交表单的时候用 那什么时候用but ...

  3. Excel 2013数据挖掘工具栏的介绍(二)

    这里不多说,直接上干货! 上一篇博客是 下载安装与配置Excel 2013数据挖掘加载项(SQL Server 2012 SP1 + SQLServer2012_DMAddin.msi) Excel ...

  4. Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份

    Linux下使用SSH.Crontab.Rsync三工具实现数据自动备份 作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份.重要数据库系统的备份工作.由于备份是个频繁而琐碎的工作,如何 ...

  5. UVA 12075 Counting Triangles

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  6. 【DRF序列化】

    目录 基本的序列化操作 外键/多对多关系的序列化 反序列化的操作 单条数据查询及更新 数据的校验 单个字段的校验 多个字段的校验 自定义校验器 终极用法 ModelSerializer 前后端分离后, ...

  7. 解决 Ubuntu 下解压 .zip 文件时出现乱码

    Ubuntu 下解压含中文名的 .zip 文件时,有时候会出现乱码的情况.我们可以通过下列命令来解决此类问题: $ unzip -O CP936 xxx.zip 原文网址 http://www.cnb ...

  8. Java生产者与消费者(下)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 上一讲我们让消费者和生产者都各停1毫秒,实际上大多并不是这样的.第二讲,我们讲一个极端的例子和一个正 ...

  9. 谈谈Spine动画在产品中的应用

    笔者介绍:姜雪伟,IT公司技术合伙人.IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  10. [TypeScript] Restrict null and undefined via Non-Nullable-Types in TypeScript

    This lesson introduces the --strictNullChecks compiler option and explains how non-nullable types di ...