字典以鍵值對存儲,查找高效。分為不可變 NSDictionary 與可變 NSMutableDictionary 兩種類型。
// 1. 單鍵值對
NSDictionary *dic = [NSDictionary dictionaryWithObject:@"hechen" forKey:@"name"];
// 2. 多鍵值對(必須以 nil 結尾)
NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"hechen", @"name", @"25", @"age", nil];
// 3. alloc/init(空字典)
NSDictionary *dic2 = [[NSDictionary alloc] init];
NSLog(@"%lu, %lu, %lu", dic.count, dic1.count, dic2.count); // 1, 2, 0
// 獲取長度
NSUInteger count = [dic count];
// 遍歷所有 Key
NSEnumerator *enumer = [dic1 keyEnumerator];
NSString *key;
while ((key = [enumer nextObject]) != nil) {
NSLog(@"Key: %@", key);
}
// 遍歷所有 Value
NSEnumerator *valEnum = [dic1 objectEnumerator];
id value;
while ((value = [valEnum nextObject]) != nil) {
NSLog(@"Value: %@", value);
}
// 根據 Key 取 Value
NSString *val = [dic1 objectForKey:@"name"]; // "hechen"
// 指定初始容量(達到上限自動擴容) NSMutableDictionary *muDic = [NSMutableDictionary dictionaryWithCapacity:10];
// 添加/修改
[muDic setObject:@"中國" forKey:@"name"];
[muDic setObject:@"area" forKey:@"add"];
// 刪除單個 Key
[muDic removeObjectForKey:@"add"];
// 批量刪除
[muDic removeObjectsForKeys:@[@"ab", @"cd"]];
// 清空所有
[muDic removeAllObjects];
// 遍歷(現代語法)
for (NSString *key in muDic) {
NSLog(@"%@ = %@", key, muDic[key]);
}
| 特性 | NSDictionary | NSMutableDictionary |
|---|---|---|
| 可變性 | 創建後不可修改 | 運行時動態增刪改 |
| 繼承關係 | 基類 | NSDictionary 子類 |
| 線程安全 | 不可變天然線程安全 | 需自行加鎖 |
| 性能 | 優化程度高 | 略低於不可變版 |
copy 為不可變NSCopying 協議(通常用 NSString)[NSNull null] 佔位)