读书频道 > 移动开发 > ios开发 > iphone开发入门很简单
2.2.3 字典(NSDictionary)的使用
2013-03-07 16:10:38     我来说两句 
收藏    我要投稿   

本文所属图书 > iphone开发入门很简单

本书是一本与众不同的iPhone开发学习读物。作者立足实战,采用理论与实例相结合的讲解方式,将相关知识点穿插于实际开发案例中,读者通过研读这些开发案例,便可轻松、快速地掌握iPhone开发的各种技能,独立编写...  立即去当当网订购

字典为对象提供了一种确定的键/值对联系的方案。当要将一个对象与一个关键字关联在一起的时候可以用到这种数据结构。其实就像每个人都有自己的名字,人本身就是这里的对象,而名字就是这里的关键字。假设世上没有同名同姓的人,而且每个人有且仅有一个名字,那么任意一个人都可以通过名字找到。

在这里,把这种处理键/值对的数据结构叫做字典,每一个字典都由若干对键/值对组成。与数组一样,字典也有一个子类叫可变字典,顾名思义就是可以增加、减少键/值对的字典。字典的结构如图2-4所示。


 

1.字典初始化的方法

首先还是来看看如何创建字典。先看两个最常用的初始化方法:

+ (id)dictionaryWithObject:(id)anObject forKey:(id)aKey
+ (id)dictionaryWithObjectsAndKeys:(id)firstObject , ...

第1个方法一般用于单对键/值对字典的初始化;第2个方法一般用于多对键/值对字典的初始化。直接看范例:

NSDictionary * dic1 = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"];
NSDictionary * dic2 = [NSDictionary dictionaryWithObjectsAndKeys:
        @"value1", @"key1", @"value2", @"key2", nil];

dic1有一对键/值对,就是@"value"和@"key",dic2有两对键/值对,分别是@"value1"和@"key1"、@"value2"和@"key2"。注意与数组那个方法类似,这里也需要一个"nil "结尾。

注意:dictionaryWithObjectsAndKeys这个方法很容易出错,主要是没有数清键/值对的个数,经常会漏掉某个或者错写,一定要引起重视,因为如果第一次写不好,后面查起来会很费精力。

2.字典取值的方法

之前提到人好比就是对象,名字好比就是关键字,从一个名字是可以找到一个人的,这个方法就是:

- (id)objectForKey:(id)aKey

看一个简单的例子就能明白这个方法的用法:

NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:
        @"value1", @"key1", @"value2", @"key2", nil];
id  value = [dic objectForKey:@"key1"];

这里value的值就是@"value1",理解起来应该没有任何障碍吧?

3.可变字典的使用方法

接下来看看可变字典的一些常规使用方法:

- (void)setObject:(id)anObject forKey:(id)aKey
- (void)removeObjectForKey:(id)aKey

细心的读者可能会问:难道就这两个吗?不应该还有个addObject吗?

这里只有这两个:如果一个键/值对存在,setObject这个方法就是修改;如果一个键/值对不存在,这个方法就是增加。下面看个例子:

NSString *LAST=@"lastName";
NSString *FIRST=@"firstName";
 
NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAndKeys:
    @"Jo", FIRST, @"Smith", LAST, nil];
NSString *MIDDLE=@"middleInitial";
 //添加
[dict setObject: @"M" forKey:MIDDLE];

很明显,这里是添加,因为原本并没有@"middleInitial"这个关键字,如果将其改为如下代码:

NSString *LAST=@"lastName";
NSString *FIRST=@"firstName";
 
NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAnd-
Keys:
    @"Jo", FIRST, @"Smith", LAST, nil];
//修改
[dict setObject: @"M" forKey:LAST];

那么所做的就是修改了,将@"Smith"变成了@"M"。

移除的用法也很简单,举例如下:

NSString *LAST=@"lastName";
NSString *FIRST=@"firstName";

NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAnd-
Keys:
    @"Jo", FIRST,@"Smith", LAST, nil];
//移除后一个键/值对
[dict removeObjectForKey: LAST];

现在 dict里面就只有一个键/值对了。

另外NSMutableDictionary还提供一个整体拼接字典的方法:

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary

这个方法在进行多个字典拼接的时候非常有用,举例如下:

//先定义需要使用的KEY
NSString *LAST=@"lastName";
NSString *FIRST=@"firstName";
NSString *SUFFIX=@"suffix";
NSString *TITLE=@"title";

NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Jo", FIRST, @"Smith", LAST, nil];

NSDictionary *newDict=[NSDictionary dictionaryWithObjectsAndKeys:
       @"Jones", LAST, @"Hon.", TITLE, @"J.D.", SUFFIX, nil];
//合并两个字典
[dict addEntriesFromDictionary: newDict];

这个方法会改变 dict字典对象的LAST所对应的值,另外再添加@"Hon."和TITLE、@"J.D. "和SUFFIX两个键/值对。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.2.2 数组(NSArray)的使用
下一篇:2.2.4 集(NSSet)的使用
相关文章
图文推荐
1.3.5 有限的屏幕尺
1.2 必备条件
精通iOS开发 : 第7版
3.5 iFunBox
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站