今天来看一下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. java 链接server上的 mongodb 出现 connect time out 问题

    异常信息 十二月 22, 2014 5:27:58 下午 com.mongodb.DBTCPConnector initDirectConnection 警告: Exception executing ...

  2. Android图像处理之冰冻效果

    原图                                                                          效果图 代码: package com.colo ...

  3. Android SecurityException

    public boolean checkNetwork() { boolean result = false; try { Context context = this.getApplicationC ...

  4. POJ 1742 Coins 优化后的多重背包

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 37853   Accepted: 12849 Descripti ...

  5. Es5正则

    ##JSON(ES5) 前端后台都能识别的数据.(一种数据储存格式) XNL在JSON出来前 JSON不支持  undefinde和函数. 示列:let = '[{"useername&qu ...

  6. 00084_Map接口

    1.Map接口概述 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同. (1)Collection中的集合,元素是孤立存在的(理解为单身),向集 ...

  7. 火车票问题.以及x轴连续矩形,最大面积问题

    假设火车有10个站点: 1000个座位 api(1)  -> param  : leftStation, rightStation -> result : cnt             ...

  8. Objective-C基础笔记(1)基本概念和第一个程序

    一.基本概念 Objective-C(简称OC)是iOS开发的核心语言,苹果公司在维护,在开发过程中也会配合着使用C语言.C++,OC主要负责UI界面,C语言.C++可用于图形处理.C语言是面向过程的 ...

  9. 使IIS服务器支持下载 apk/ipa 安装包

    默认情况下,使用IIS作为Web服务器的无法下载此文件,访问会触发404错误,服务器找不到对应资源. IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. ...

  10. 请求不携带cookie问题

    因为后端需要用到cookie做一些判断,所以在post请求前先写入了cookie.在页面未登录时,调接口能带上cookie,登录后的请求没有携带cookie,但是能看到cookie已经保存了. (ax ...