今天来看一下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. 39.Node.js域名解析---DNS模块

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var ...

  2. POJ 2133 暴搜

    题意: 思路: 按照题意暴搜 注意 如果目标串==给的串 答案是2 //By SiriurRen #include <cstdio> #include <cstring> #i ...

  3. Linux下截图技巧

           在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...

  4. MATLAB 软件学习

    what  列出当前目录或指定目录下的M\MAT 和 MAX 文件 …   在语句行尾端表示该行未完 !  调用操作系统的命令 isvarname  判断变量名是否有效 声明全局变量   变量名前加 ...

  5. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

    代码: package com.liron.p1; import java.io.IOException; import java.util.Scanner; /** * 求s=a+aa+aaa+aa ...

  6. CMDB学习之一

    CMDB - 配置管理数据库 资产管理 自动化相关的平台(基础 CMDB): 1. 发布系统 2. 监控 3. 配管系统.装机 4. 堡垒机 CMDB的目的: 1. 替代EXCEL资产管理 —— 资产 ...

  7. 【Hello 2018 B】Christmas Spruce

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 写个dfs看看是不是每个节点都有3个叶子节点就可以了. [代码] #include <bits/stdc++.h> us ...

  8. ORA-01031: 权限不足

    1.错误描写叙述 ORA-01031: 权限不足 2.错误原因 SQL> create user yhd identified by scott account unlock; create u ...

  9. Ubuntu 14 中给 APACHE2安装 SSL 模块 Enable SSL site on Ubuntu 14 LTS, Apache 2.4.7:

    Ubuntu 14 中给 APACHE2安装 SSL 模块 Enable SSL site on Ubuntu 14 LTS, Apache 2.4.7: 参考 http://blog.csdn.ne ...

  10. IIS特殊字符设置

    简介:[iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求.HTTP 错误 404.11 - Not Found 特殊字符最好替换成其他的字符,主要的特殊字符有”*”.”&”.”%”.” ...