0x01 NSDictionary
字典NSDictionary是关键字及其定义的集合。
NSDictionary可以在给定的关键字下存储一个数值(可以是任意类型的Objective-C对象),可以通过该关键字查找对应的数据。
字典NSDictionary使用的是键查询的优化方式,该方式不需要遍历整个数组,速度比普通查询数组数值要快得多。
0x02 NSMutableDictionary
NSDictionary类似于NSString和NSArray,都是不可变的对象。
Cocoa同样提供了NSMutableDictionary类来创建可变字典。
与NSMutableArray一样,没有适用于NSMutableDictionary的字面量初始化方法!
0x03 NSDictionary的创建及访问
在创建新的字典时,就要提供该字典所存储的所有对象和关键字。
字面量初始化
字面量语法即使用类似@{key:value,...}的方法来定义一个字典(关键字在前,数值在后):
NSDictionary *tires = @{@"front-left" : ti, @"front-right" : t2,
@"back-left" : t3, @"back-right" : t4};
类方法dictionaryWithObjectsAndKeys
dictionaryWithObjectsAndKeys:类方法接收对象和关键字交替出现的序列,以nil值为终止符号(再次说明nil值不能出现在NSDictionary中)。
后面的参数是先写数值,再写关键字,注意和字面量语法区别!
+ (id) dictionaryWithObjectsAndKeys: (id) firstObject, ...;
//示例
NSDictionary *tires = [NSDictionary dictionaryWithObjectsAndKeys: t1,
@"front-left", t2, @"front-right", t3, @"back-left", t4, @"back-right", nil];
objectForKey
使用objectForKey:方法并传递前面用来存储的关键字,就可以访问字典中的数值:
- (id) objectForKey: (id) aKey; // #1
tires[key]; // #2
//示例
//#1
Tire *tire = [tires objectForKey:@"back-right"];
//#2
Tire *tire = tires[@"back-right"];
0x04 NSMutableDictionary的创建及访问
dictionary and dictionaryWithCapacity
向NSMutableDictionary发送dictionary消息,便可创建一个空的NSMutableDictionary对象;
也可以使用dictionaryWithCapacity:方法来创建一个建议大小的NSMutableDictionary对象(大小仅为建议而非限制)。
向NSMutableDictionary添加字典元素
使用setObject:forKey:方法可为字典添加元素。
如果对字典中已有的关键字使用setObject:forKey:方法,那新值将会替换旧值。
+ (id) dictionaryWithCapacity: (NSUInteger) numItems;
- (void)setObject:(id)anObject forKey:(id)aKey;
//示例
NSMutableDictionary *tires = [NSMutableDictionary dictionary];
[tires setObject:tl forKey:@"front-left"];
[tires setObject:t2 forKey:@"front-right"];
[tires setObject:t3 forKey:@"back-left"];
[tires setObject:t4 forKey:@"back-right"];
删除NSMutableDictionary的关键字
使用removeObjectForKey:方法可以删除可变字典中的一些关键字。
- (void) removeObjectForKey: (id) aKey;
//示例
[tires removeObjectForKey:@"back-left"];