一、NSDictionary介紹
1、NSDictionary的介紹
NSDictionary翻譯過來叫做”字典”
日常生活中, “字典”的作用: 通過一個拼音或者漢字, 就能找到對應的詳細解釋。
NSDictionary的作用類似: 通過一個key(鍵), 就能找到對應的value(值) NSDictionary是不可變的, 一旦初始化完畢, 裡面的内容就無法修改。
2、NSDictionary的建立
1)建立空字典
NSDictionary *d1 = [NSDictionary dictionary];
NSLog(@"d1 = %@",d1);
列印結果:
d1 = {
}
2)建立隻有一組鍵值對的字典
NSDictionary *d2 = [NSDictionary dictionaryWithObject:@"jiaozuo" forKey:@"H"];
NSLog(@"d2 = %@",d2);
列印結果:
d2 = {
H = jiaozuo;
}
3)建立多組鍵值對的字典
NSDictionary *d3 = [NSDictionary dictionaryWithObjectsAndKeys:@"jiaozuo",@"H",@"zhengzhou",@"A",@"luoyang",@"C", nil];
NSLog(@"d3 = %@",d3);
列印結果:
d3 = {
A = zhengzhou;
C = luoyang;
H = jiaozuo;
}
4)快速建立一個字典@{key值:value值}
NSDictionary *d4 = @{
@"S":@"dazhou",@"A":@"chengdu"
};
NSLog(@"d4 = %@",d4);
列印結果:
d4 = {
A = chengdu;
S = dazhou;
}
3、鍵值對集合的特點
1)字典存儲的時候,必須是”鍵值對”的方式來存儲(同時鍵不要重複)
2) 鍵值對中存儲的資料是”無序的”.
3) 鍵值對集合可以根據鍵, 快速擷取資料.
二、NSDictionary基本使用方法
1、擷取字典長度
NSLog(@"d4.count = %lu",d4.count);
列印結果:
d4.count = 2
2、根據key值取出value值
NSString *str1 = [d4 valueForKey:@"A"];
NSString *str2 = [d4 objectForKey:@"A"];
NSLog(@"str1 = %@",str1);
NSLog(@"str2 = %@",str2);
列印結果:
str1 = chengdu
str2 = chengdu
三、NSDictionary周遊方法
1、增強for循環方法
NSDictionary *d5 = @{
@"A":@"zhengzhou",@"C":@"luoyang",@"H":@"jiaozuo"
};
//第一步:擷取所有的key
//第二步:根據key擷取value值
for (NSString *key in d5) {
NSLog(@"key = %@,value = %@",key,[d5 valueForKey:key]);
}
列印結果:
key = A,value = zhengzhou
key = C,value = luoyang
key = H,value = jiaozuo
2、block方法
[d5 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"key = %@,value = %@",key,obj);
}];
列印結果:
key = A,value = zhengzhou
key = C,value = luoyang
key = H,value = jiaozuo
三、NSDictionary的檔案操作
1、把字典儲存到檔案中
//簡寫形式定義一個字典
NSDictionary *d1 = @{
@"jz":@"jiaozuo",@"ly":@"luoyang",@"zz":@"zhengzhou"
};
NSLog(@"d1 = %@",d1);
//簡寫形式擷取key對應的value值
NSLog(@"%@",d1[@"jz"]);
//把字典儲存到檔案中
if([d1 writeToFile:@"/Users/leikai/Desktop/d1.plist" atomically:YES]){
NSLog(@"寫入成功");
}else{
NSLog(@"寫入失敗");
}
列印結果:
d1 = {
jz = jiaozuo;
ly = luoyang;
zz = zhengzhou;
}
jiaozuo
寫入成功
寫入結果:

2、從檔案中讀取字典
NSDictionary *d2 = [NSDictionary dictionaryWithContentsOfFile:@"/Users/leikai/Desktop/d1.plist"];
NSLog(@"d2 = %@",d2);
3、字典包含數組并讀寫操作
1)寫入操作
NSArray *hnArr = @[@"zhengzhou",@"luoyang",@"jiaozuo"];
NSArray *scArr = @[@"chengdu",@"dazhou"];
NSDictionary *d3 = @{
@"hn":hnArr,@"sc":scArr
};
if ([d3 writeToFile:@"/Users/leikai/Desktop/d3.plist" atomically:YES]) {
NSLog(@"寫入成功");
}else{
NSLog(@"寫入失敗");
}
列印結果:
寫入成功
寫入結果:
2)讀取操作
NSDictionary *d5 = [NSDictionary dictionaryWithContentsOfFile:@"/Users/leikai/Desktop/d3.plist"];
NSLog(@"d5 = %@",d5);
//周遊
[d5 enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
//擷取每個元素
for (NSString *str in obj) {
NSLog(@"%@",str);
}
}];
//擷取每個數組
NSArray *hnArr = d5[@"hn"];
NSLog(@"hnArr = %@",hnArr);
NSArray *scArr = d5[@"sc"];
NSLog(@"scArr = %@",scArr);
列印結果:
d5 = {
hn = (
zhengzhou,
luoyang,
jiaozuo
);
sc = (
chengdu,
dazhou
);
}
zhengzhou
luoyang
jiaozuo
chengdu
dazhou
hnArr = (
zhengzhou,
luoyang,
jiaozuo
)
scArr = (
chengdu,
dazhou
)