iOS 開發:Foundation 框架詳盡總結之『字典類』

本文首發於我的個人博客:『不羈閣』 https://bujige.net
文章鏈接:https://bujige.net/blog/iOS-Foundation-Dictionary.html

本文對Foundation框架中的字典類(NSDictionary和NSMutableDictionary)的使用做一個詳細的總結。

1. NSDictionary

1.NSDictionar介紹

  • Dictionary翻譯過來叫做"字典"
  • 日常生活中,“字典”的作用:通過一個拼音或者漢字,就能找到對應的詳細解釋
  • NSDictionary的作用類似:通過一個鍵(key),就能找到對應的值(value)
  • NSDictionary中的鍵(key)是單值,通常是字符串,也可以是其他對象類型
  • NSDictionary中和鍵(key)關聯的值(value)可以是任何對象類型,但不能是nil
  • NSDictionary是不可變的,一旦初始化完畢,裏面的內容就無法修改

2.NSDictionary的創建

+ (instancetype)dictionary;
+ (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key;
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;
+ (id)dictionaryWithContentsOfFile:(NSString *)path;
+ (id)dictionaryWithContentsOfURL:(NSURL *)url;

3. NSDictionary創建和獲取簡寫

  • 以前NSDictionary創建方式
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Walkers", @"name", @"12345678", @"phone", @"ZhongGuo", @"address", nil];
NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"Walkers",@"30",@"1.75"] forKeys:@[@"name",@"age",@"height"]];

  • 現在NSDictionary創建簡寫方式
NSDictionary *dict = @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"};
  • 以前NSDictionary獲取元素方式
[dict objectForKey:@"name”];
  • 現在NSDictionary獲取元素簡寫方式
dict[@"name”];

4. 鍵值對集合的特點

  • 字典存儲的時候,必須是"鍵值對"的方式來存儲(同時鍵不要重複)
  • 鍵值對中存儲的數據是"無序的"
  • 鍵值對集合可以根據鍵,快速獲取數據

5. NSDictionary的遍歷

  • 返回字典的鍵值對數目- (NSUInteger)count;
NSDictionary *dict = @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"};
NSLog(@"count = %lu",[dict count]);

輸出結果:count = 3
  • 根據key取出value- (id)objectForKey:(id)aKey;
NSDictionary *dict = @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"};
NSLog(@"%@",[dict objectForKey:@"name"]);

輸出結果:Walkers

  • 快速遍歷

NSDictionary *dict = @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"};

for (NSString *key in dict) {
    NSLog(@"key = %@, value = %@", key, dict[key]);
}

輸出結果:
key = name, value = Walkers
key = phone, value = 12345678
key = address, value = ZhongGuo
  • Block遍歷
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
    NSLog(@"key = %@, value = %@", key, obj);
}];

6. NSDictionary文件操作

  • 將字典寫入文件中
    • - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
    • - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
    • 存儲結果是xml文件格式,但蘋果官方推薦爲plist後綴
  • 示例

NSDictionary *dict = @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"};

BOOL flag = [dict writeToFile:@"/Users/Walkers/Desktop/dict.plist" atomically:YES];
NSLog(@"flag = %i", flag);

輸出結果:flag = 1

文件裏的內容顯示結果如下圖

 
1877784-a8341af5edf5e78e.png
1.png
  • 從文件中讀取字典

NSDictionary *newDict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/Walkers/Desktop/dict.plist"];
NSLog(@"newDict = %@", newDict);

7. NSDictionary和NSArray對比

1. NSDictionary和NSArray的區別

  • NSArray是有序的,NSDictionary是無序的
  • NSArray是通過下標訪問元素,NSDictionary是通過key訪問元素

2. NSDictionary和NSArray的用法

  • 創建
// 數組
@[@"Walkers", @"Rose"] (返回是不可變數組)
// 字典
@{ @"name" : @"Walkers", @"phone" : @"12345678" } (返回是不可變字典)

  • 訪問
// 數組
id d = array[1];
// 字典
id d = dict[@"name"];

  • 賦值
// 數組
array[1] = @"Walkers";
// 字典
dict[@"name"] = @"Walkers";


2. NSMutableDictionary

1.NSMutableDictionary介紹

  • NSMutableDictionary是NSDictionary的子類
  • NSDictionary是不可變的,一旦初始化完畢後,它裏面的內容就永遠是固定的,不能刪除裏面的元素,也不能再往裏面添加元素
  • NSMutableDictionary是可變的,隨時可以往裏面添加\更改\刪除元素

2. NSMutableDictionary的常見操作

  • 添加/修改一個鍵值對(如果aKey之前有值,則會把aKey之前對應的值給替換掉)- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;

NSMutableDictionary *dict = [NSMutableDictionary  dictionary];

[dict setObject:@"Walkers" forKey:@"name"];
NSLog(@"%@", dict);

輸出結果:
{
    name = Walkers;
}
NSMutableDictionary *dict = [NSMutableDictionary  dictionary];

[dict setObject:@"Walkers" forKey:@"name"];
NSLog(@"%@", dict);

[dict setObject:@"abc" forKey:@"name"];
NSLog(@"%@", dict);

輸出結果:
{
    name = Walkers;
}
{
    name = abc;
}
  • 通過aKey刪除對應的value- (void)removeObjectForKey:(id)aKey;
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValuesForKeysWithDictionary: @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"}];

[dict removeObjectForKey:@"name"];
NSLog(@"%@",dict);

輸出結果:
{
    address = ZhongGuo;
    phone = 12345678;
}
  • 刪除所有的鍵值對- (void)removeAllObjects;
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setValuesForKeysWithDictionary: @{@"name":@"Walkers", @"phone":@"12345678", @"address":@"ZhongGuo"}];

[dict removeAllObjects];
NSLog(@"%@",dict);

輸出結果:
{
}

3. NSMutableDictionary的簡寫

  • 以前設置鍵值對方式
[dict setObject:@"Jack" forKey:@"name”];
  • 現在設置鍵值對方式
dict[@"name"] = @"Jack";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章