標籤:
在Objective-C中提供了兩個類來實現字典,即NSDictionary和NSMutableDictionary。其中,NSMutableDictionary是NSDictionary的子類,它繼承父類方法的同時又支援對資料進行插入和刪除操作,它們共同實現了以“索引值對”的方式儲存資料。
// Objective-C中實現的字典相比於其他語言而言,還有一個最大的不同:即同一個字典中可以儲存不同類型的對象。
1 NSDictionary1.1 建立不可變字典
可以使用類方法dictionaryWithObjectsAndKeys:建立並初始化字典,樣本如下:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"val1", @"key1", @"val2", @"key2", nil];
注意:在使用索引值對初始化字典時,“值”在前,“鍵”在後,成對出現,各個參數之間使用逗號分隔,並且最後使用nil結束。使用以上方法建立的字典記憶體分布如所示:
1.2 擷取字典大小
在執行字典操作之前,常常需要擷取字典大小,也就是確定字典中“索引值對”的數量,我們可以使用count訊息,使用方法如下:
int cnt = [dict count];
該方法會返回一個NSInteger類型的變數,我們也可以直接使用int類型的變數接收。
1.3 得到字典中所有的KEY
對字典發送keyEnumerator訊息可以返回一個枚舉對象,其中儲存了字典中所有的鍵:
NSEnumerator *enumKeys = [dict keyEnumerator];for (NSObject *obj in enumKeys){ NSLog(@"enumKey: %@", obj);}
使用“for-in”文法可以實現可枚舉對象的遍曆,以上代碼中的迴圈可以遍曆所有鍵,並且輸出:
2016-07-24 10:03:11.873 OCTest[2547:94272] enumKey: key12016-07-24 10:03:13.753 OCTest[2547:94272] enumKey: key2
注意:如果我們直接使用"for-in"文法遍曆字典對象,實際上也相當於對“鍵”的遍曆。
for (NSObject *obj in dict){ NSLog(@"key in dic: %@", obj);}
執行以上代碼的輸出為:
2016-07-24 10:10:17.590 OCTest[2667:97958] key in dic: key12016-07-24 10:10:17.590 OCTest[2667:97958] key in dic: key2
1.4 遍曆字典中的所有VALUE
可以使用擷取“鍵”類似的方法擷取字典中的“值”,只需要對字典發送objectEnumerator訊息即可:
NSEnumerator *enumValues = [dict objectEnumerator];for (NSObject *obj in enumValues){ NSLog(@"value in dic: %@", obj);}
運行結果如下:
2016-07-24 10:14:41.984 OCTest[2702:100424] value in dic: val12016-07-24 10:14:41.984 OCTest[2702:100424] value in dic: val2
1.5 根據KEY檢索VALUE
對於字典而言,最常見的操作就是尋找了,也就是根據給定的KEY,檢索對應的VALUE,方法如下:
NSObject *value = [dict objectForKey:@"key1"];if (value != nil){ NSLog(@"value in dict: %@", value);}
運行結果如下:
2016-07-24 10:20:09.012 OCTest[2736:103393] value in dict: val1
Objective-C中字典的使用方法總結