首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Objective-C 字典類全解析:NSDictionary 與 NSMutableDictionary

     編輯:關於C

Objective-C 字典集合

字典以鍵值對存儲,查找高效。分為不可變 NSDictionary 與可變 NSMutableDictionary 兩種類型。

NSDictionary(不可變)

初始化方式

// 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(可變)

創建與容量

// 指定初始容量(達到上限自動擴容)
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]);
}

核心區別總結

特性NSDictionaryNSMutableDictionary
可變性創建後不可修改運行時動態增刪改
繼承關係基類NSDictionary 子類
線程安全不可變天然線程安全需自行加鎖
性能優化程度高略低於不可變版

最佳實踐

  • 優先使用不可變字典,減少副作用
  • 需頻繁修改時用可變版,用完可 copy 為不可變
  • 鍵必須遵循 NSCopying 協議(通常用 NSString)
  • 鍵值均不能為 nil(需用 [NSNull null] 佔位)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved