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很相似,又早起的一批人开发的,内部有很多现 ...
随机推荐
- Onvif开发之服务端发现篇
服务端的开发相对来说比客户端稍微难一点,也就是给填充相关结构体的时候,需要一点一点的去查阅,验证各个结构中各个成员各自代表什么意思,以及对应的功能需要是那个接口实现,这是开发服务端最头疼的事情.(在开 ...
- POJ 2430 状压DP
题意: 思路: 先预处理出所有格子的statement statement=1–>只有上边的格子被覆盖 statement=2–>只有下边的格子被覆盖 statement=3–>上下 ...
- JavaScript笔记(2)
-->变量的定义 1.取得并使用值是所有程序设计中的要点 2.JS中的变量是没有类型的,在JS中只有值才持有类型,变量所持有的是其对应值的类型. 3.变量的取名要符合标识符的规则: (1)一个J ...
- kali之Nmap (Network Mapper(网络映射器)
Nmap是主机扫描工具,他的图形化界面是Zenmap,分布式框架为Dnamp. Nmap可以完成以下任务: 主机探测 端口扫描 版本检测 系统检测 支持探测脚本的编写 Nmap在实际中应用场合如下: ...
- chage---修改帐号和密码的有效期限
chage命令 chage命令是用来修改帐号和密码的有效期限. 语法 chage [选项] 用户名 选项 -m:密码可更改的最小天数.为零时代表任何时候都可以更改密码. -M:密码保持有效的最大天 ...
- C# WinForm设置透明
1:通过设置窗体的 TransparencyKey实现 例:窗体中的白色会变成透明 this.BackColor =Color.White; this.TransparencyKey = ...
- Android开发数据库之第三方ORM框架(GreenDao)
移动APP追求追求功能实现的同一时候,用户体验很重要.開始APP的同一时候.要时刻的切换开发人员的角色,如你开发的时候.是 站在APP的开发角色,处于生产者的位置:当你測试的时候.你应该把自己放在用户 ...
- oracle跨数据库跨用户訪问注意事项
java代码中不同意出现oracle的username.数据链路名. 跨用户.跨数据库的訪问必须在oracle中建同义词或视图来实现.在java代码中仅仅需当做当前用户下的对象处理.
- 前6名免费DNS服务 - 公共DNS服务
前6名免费DNS服务 - 公共DNS服务 谷歌 8.8.8.8,8.8.4.4备份,用户将期望并获得高可用性,如DNSSEC等过滤和安全保护. OpenDNS 现在是Cisco帝国的一部分,主要是20 ...
- sqlserver存储过程实现多表分页
if @PageIndex = 1 begin if @strWhere != ’’ set @strSQL = ’select top ’ + str(@PageSize) +’ ’+@strGet ...