Objective-C的Foundation框架——字典NSDictionary

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"];

猜你喜欢

转载自blog.csdn.net/qq_33737036/article/details/81177520