OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类
今天来看一下Foundation框架中的NSDictionary类,NSMutableDictionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和NSArray不一样,Java中的Map也是无序的,通过hash值去检索元素的。
一、NSDictionary类
- //
- // main.m
- // 19_NSDictionary
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- //由键值对key-value构成的数据集合
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.---------------------字典的创建
- NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];
- NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];
- //第一个元素:key:@"zhang" value:array1
- //第二个元素:key:@"li" value:array2
- NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];
- NSLog(@"%@",dict);
- //存放一个元素
- NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];
- //2.---------------------获取所有的key
- NSArray *allKeys = [dict allKeys];
- //3.---------------------获取所有的value
- //可能为二维数组
- NSArray *allValues = [dict allValues];
- //4.---------------------通过key获取value
- NSArray *values = [dict objectForKey:@"zhang"];
- //5.---------------------优化的语法
- NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
- NSLog(@"%@",dict3);
- NSArray *array4 = dict3[@"zhang"];
- }
- return 0;
- }
1、创建方法
- //1.---------------------字典的创建
- NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil];
- NSArray *array2 = [NSArray arrayWithObjects:@"lisi",@"liping", nil nil];
- //第一个元素:key:@"zhang" value:array1
- //第二个元素:key:@"li" value:array2
- NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:array1,@"zhang",array2,@"li", nil nil];
- NSLog(@"%@",dict);
我们可以看到,NSDirctionary类的创建是基于NSArray的,然后其他的和Java中的Map就差不多了,一般是key-value的形式,当然这里也是需要注意结尾是:nil
运行结果:
打印结果是key-value的样式
2、添加元素
- //存放一个元素
- NSDictionary *dict2 = [NSDictionary dictionaryWithObject:array1 forKey:@"zhang"];
3、获取所有元素的key
- //2.---------------------获取所有的key
- NSArray *allKeys = [dict allKeys];
4、获取所有元素的value
- //3.---------------------获取所有的value
- //可能为二维数组
- NSArray *allValues = [dict allValues];
5、通过key获取value
- //4.---------------------通过key获取value
- NSArray *values = [dict objectForKey:@"zhang"];
6、NSDirctionary的快速创建方式和访问方式
- //5.---------------------优化的语法
- NSDictionary *dict3 = @{@"zhangsan":array1,@"lisi":array2};
- NSLog(@"%@",dict3);
- NSArray *array4 = dict3[@"zhang"];
二、NSMutableDictionary类
- //
- // main.m
- // 20_NSMutableDictionary
- //
- // Created by jiangwei on 14-10-12.
- // Copyright (c) 2014年 jiangwei. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- //可变字典
- int main(int argc, const charchar * argv[]) {
- @autoreleasepool {
- //1.-------------创建一个可变字典,大小为3
- NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];
- NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil nil];
- //2.-------------添加元素
- [md1 setObject:array1 forKey:@"zhang"];
- NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
- [md2 addEntriesFromDictionary:md1];
- //3.-------------删除元素
- [md1 removeObjectForKey:@"zhang"];//以key删除
- [md1 removeAllObjects];//删除所有元素
- [md1 removeObjectsForKeys:array1];//以value删除
- //4.-------------循环遍历字典
- //快速遍历
- for (NSString *key in md1) {
- NSArray *values = [md1 objectForKey:key];
- for(NSString *v in values){
- NSLog(@"%@",v);
- }
- }
- //普通遍历
- NSArray *allKey = [md1 allKeys];
- for(int i=0;i<allKey.count;i++){
- NSArray *value = [md1 objectForKey:allKey[i]];
- }
- //字典是无序的
- }
- return 0;
- }
之前的NSDictionary类是不可变字典,同样的OC中也有对应的可变字典:NSMutableDictionary
1、创建可变字典
- //1.-------------创建一个可变字典,大小为3
- NSMutableDictionary *md1 = [[NSMutableDictionary alloc] initWithCapacity:3];
- NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhangsan",@"lis", nil nil];
创建一个可变字典,可以指定其大小,当然当容量满的之后,他回自动扩容
2、添加元素
- //2.-------------添加元素
- [md1 setObject:array1 forKey:@"zhang"];
- NSMutableDictionary *md2 = [[NSMutableDictionary alloc] initWithCapacity:3];
- [md2 addEntriesFromDictionary:md1];
3、删除元素
- //3.-------------删除元素
- [md1 removeObjectForKey:@"zhang"];//以key删除
- [md1 removeAllObjects];//删除所有元素
- [md1 removeObjectsForKeys:array1];//以value删除
4、遍历字典
- //4.-------------循环遍历字典
- //快速遍历
- for (NSString *key in md1) {
- NSArray *values = [md1 objectForKey:key];
- for(NSString *v in values){
- NSLog(@"%@",v);
- }
- }
- //普通遍历
- NSArray *allKey = [md1 allKeys];
- for(int i=0;i<allKey.count;i++){
- NSArray *value = [md1 objectForKey:allKey[i]];
- }
总结
这一篇文章就介绍了OC中的NSDirctionary类和NSMutableDirctionary类,他们的用途在后面非常关键,经常被用到。
OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类的更多相关文章
- (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
前一篇说到了Foundation框架中的NSDirctionary类,这一一篇来看一下Foundation的其他常用的类:NSNumber,NSDate,NSException. 注:其实按照Java ...
- OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于J ...
- (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
昨天学习了Foundation框架中NSArray类和NSMutableArray类,今天来看一下Foundation框架中的NSDirctionary类,NSMutableDirctionary类, ...
- (转载)OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
在之前的一篇文章中介绍了Foundation框架中的NSString类和NSMutableString类,今天我们继续来看一下Foundation框架中的NSArray类和NSMutableArray ...
- (转载)OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
在之前的一篇文章中我们说到了Foundation框架中的NSObject对象,那么今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString. 在OC中 ...
- (转载)OC学习篇之---Foundation框架中的NSObject对象
前一篇文章讲到了OC中的代理模式,而且前几篇文章就介绍了OC中的类相关知识,从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套a ...
- OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类
我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArr ...
- OC学习篇之---Foundation框架中的NSString对象和NSMutableString对象
今天在在来继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutabl ...
- OC学习篇之---Foundation框架中的NSObject对象
从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现 ...
随机推荐
- 详解Android插件化开发-资源访问
动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块. 通常我们把安卓资源文件制 ...
- Kinect 开发 —— 深度信息(二)
转自(并致谢):http://www.cnblogs.com/yangecnu/archive/2012/04/05/KinectSDK_Depth_Image_Processing_Part2.ht ...
- 【canvas】跟随鼠标的星空连线
2019-01-23 19:57:38 挂一个比较简单的一个canvas应用,利用CPU进行粒子实时计算,直接面向过程写的 帧动画:浏览器在下一个动画帧安排一次网页重绘, requestAnimat ...
- 【Codeforces Round #426 (Div. 2) A】The Useless Toy
[Link]:http://codeforces.com/contest/834/problem/A [Description] [Solution] 开个大小为4的常量字符数组; +n然后余4,-n ...
- Android开发之经常使用开源库直接拿来用
1.from 代码家 整理比較好的源代码连接 **************************************************************************** ...
- ViewPager 入门一
使用ViewPager能够得到不同view的切换效果 例如以下图,实现了四个view间的相互滑动 一.新建项目,引入ViewPager控件 ViewPager.它是google SDk中自带的一个附加 ...
- 没有killall命令的解决方法
没有killall命令的解决方法 -bash: killall: command not found https://www.byte128.com/archives/231.html 执行killa ...
- Ajax跨域:Jsonp实例--百度搜索框下拉提示
Ajax跨域:Jsonp实例--百度搜索框下拉提示 一.总结 一句话总结:a.找好接口:b.用script标签的src引入文件(json数据):c.定义及实现上一步引入文件中的函数 1.如何找到一个网 ...
- Objective-C基础笔记(8)Foundation常用类NSString
一.创建字符串的方法 void stringCreate(){ //方法1 NSString *str1 = @"A String!"; //方法2 NSString *str2 ...
- Monkey测试执行指导
1.Monkey常规测试