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很相似,又早起的一批人开发的,内部有很多现 ...
随机推荐
- elasticsearch index之Translog
跟大多数分布式系统一样,es也通过临时写入写操作来保证数据安全.因为lucene索引过程中,数据会首先据缓存在内存中直到达到一个量(文档数或是占用空间大小)才会写入到磁盘.这就会带来一个风险,如果在写 ...
- ajax 使用 与 缓存问题
1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结 ...
- js的类和继承
因为我使用java语言入门的编程,所以对javascript的类和继承有种想当然一样,或者是差不多的感觉,但实际上两者还是有很多不同的 首先我们说类,javascript中类的实现是基于原型继承机制的 ...
- 59.C++与正则表达式
regex_match 整个字符串是否匹配 (通过cmatch存储匹配的结果),match[0]代表整个匹配序列,match[1]代表第1个匹配后的子序列,match[2]代表第2个匹配后的子序列 代 ...
- 项目: 基于Python socket模块实现的简单 ftp 项目:
需要 自己创建一个 info 文件 用来存储用户信息 服务器: import socket import pickle import struct import os import time ''.s ...
- 【2017 Multi-University Training Contest - Team 3】Kanade's sum
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6058 [Description] 给你n个数; 它们是由(1..n)组成的排列; 然后给你一个数字 ...
- spring之AOP(转)
Spring之AOP篇: AOP框架是Spring的一个重要组成部分.但是Spring IOC 并不依赖于AOP,这就意味着你有权力选择是否使用AOP,AOP作为Spring IOC容器的一个补充,使 ...
- CSS3:元素的边框、背景和大小
边框 和边框相关的属性例如以下. border-width 用于设置边框的宽度,可选择包含: 1)<长度值>:将边框宽度设为以CSS度量单位(如em.px.cm)表达的长度值. 2)< ...
- 通过wireshark,以及python代码收发邮件,了解smtp协议,pop协议工作过程
40返回连接server成功 41.43发送ehlo命令查询server支持命令 返回250 44.46请求认证 server响应235认证成功 47.49发送mail命令发送者邮箱 返回250 ...
- BZOJ1030: [JSOI2007]文本生成器(Trie图+dp)
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...