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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章