字典(NSDictionary)的使用

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

在这里,把这种处理键/值对的数据结构叫做字典,每一个字典都由若干对键/值对组成。与数组一样,字典也有一个子类叫可变字典,顾名思义就是可以增加、减少键/值对的字典。字典的结构如图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 *[email protected]"lastName";

NSString *[email protected]"firstName";

NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAndKeys:

@"Jo", FIRST, @"Smith", LAST, nil];

NSString *[email protected]"middleInitial";

//添加

[dict setObject: @"M" forKey:MIDDLE];

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

NSString *[email protected]"lastName";

NSString *[email protected]"firstName";

NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAnd-

Keys:

@"Jo", FIRST, @"Smith", LAST, nil];

//修改

[dict setObject: @"M" forKey:LAST];

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

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

NSString *[email protected]"lastName";

NSString *[email protected]"firstName";

NSMutableDictionary *dict=[NSMutableDictionary dictionaryWithObjectsAnd-

Keys:

@"Jo", FIRST,@"Smith", LAST, nil];

//移除后一个键/值对

[dict removeObjectForKey: LAST];

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

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

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary

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

//先定义需要使用的KEY

NSString *[email protected]"lastName";

NSString *[email protected]"firstName";

NSString *[email protected]"suffix";

NSString *[email protected]"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两个键/值对。

时间: 2024-11-01 03:52:12

字典(NSDictionary)的使用的相关文章

iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转

1. 字典转Json字符串 + (NSString*)convertToJSONData:(id)infoDict { NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:infoDict options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated stri

字典NSDictionary以及NSMutableDictionary的用法总结

做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典对象就是做这个事情的,不过在同一个词典对象中可以保存多个不同类型的数据,不像Java与C 只能保存声明的相同类型的数据,它的关键字为NSDictionary与NSMutableDictionary.阅读过我之前文章的朋友应该从关键字的 结构就可以看出这两个的区别.很明显前者为不可变词典,或者为可变词

IOS字典NSDictionary与NSMutableDictionary知识点

字典中的元素是以键值对的形式存储的,键值对的键和值,都是任意的对象,但是键往往使用字符串,字典存储对象的地址没有顺序,字典的遍历分为:键的遍历和值的遍历,字典与数组的区别:数组讲究顺序,而字典可以快速帮助我们找到数据,数据是我们的目的,键是我们的手段;其中NSMutableDictionary是NSDictionary的子类,所以其拥有NSDictionary所有的功能:主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合: a:NSDict

Foundation框架--字典( NSDictionary NSMutableDictionary )

基础知识 1.字典不允许相同的key,但允许有相同的value. 2,字典是无序的,字典不能排序. 3.字典里的内容是成对存在的,不会出现单数. 4.快速创建的方式只适合不可变字典.

字典NSDictionary的常见用法

1 // 动态获取字典的第一个典 2 3 NSString *firstKey = responseObject.keyEnumerator.nextObject;

swift基本用法-字典NSDictionary的定义,修改键值,删除/添加键值

// Playground - noun: a place where people can play import UIKit //------------------------------------------------------------------------------ // 1. 定义固定格式的字典 // dict1的所有"键值"类型一致(都是字符串) var dict1 = ["name": "mary", "a

iOS/Objective-C开发 字典NSDictionary的深复制(使用category)

目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法,可以得到一个NSMutableDictionary对象,但这只是浅复制,如果我们修改NSDictionary中数组内的值(当然,数组必须是NSMutableArray),会发现,NSMutableDictionary对象内数组的值也跟着更改了.我们需要增加一个mutableDeepCopy方法来实现

NSDictionary使用小结(字典)

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建字典 NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"]; NSLog(@"dic1 :%@", dic1); //创建多个字典 N

ios model字典 NSArray NSDictionary小结

ios model字典 #import <Foundation/Foundation.h> @interface AdObject : NSObject /// 广告ID @property (strong,nonatomic) NSString *adID; /// 广告图片的地址 @property (strong,nonatomic) NSString *imagePath; /// 广告标题 @property (strong,nonatomic) NSString *adTitle;

iOS NSDictionary 字典

//创建字典 NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"value" forKey:@"key"]; NSLog(@"dic1 :%@", dic1); 对于不可变NSDictionary *dic1 =@{@"value":@"key",@"value1":@"key1"}; //创建多个字典