Foundation框架: 9.OC中的集合类之四 - NSMutableDictionary的基本认识
前面我們講了NSDictionary, 現(xiàn)在我們來(lái)講一下它的子類(lèi)NSMutableDictionary, 這個(gè)NSMutableDictionary和前面的NSMutableString, NSMutableArray是一樣的原理, 都是可變的, 下面讓我們來(lái)看看它是怎么運(yùn)作的:
例子:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:@"jim" forKey:@"name"];[dic setObject:@"18" forKey:@"age"];id obj = dic[@"name"];id obj2 = dic[@"age"];NSLog(@"obj = %@, obj2 = %@", obj, obj2);return 0; }打印出來(lái)的結(jié)果:2015-02-05 23:18:15.963 9.NSMutableDictionary[4210:303] obj = jim, obj2 = 18
在前面我說(shuō)過(guò), 一個(gè)鍵就只能對(duì)應(yīng)一個(gè)值, 那如果有一個(gè)鍵對(duì)應(yīng)多個(gè)值會(huì)發(fā)生什么事呢? 下面來(lái)看看:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:@"jim" forKey:@"name"];[dic setObject:@"18" forKey:@"age"];[dic setObject:@"30" forKey:@"age"];id obj = dic[@"name"];id obj2 = dic[@"age"];NSLog(@"obj = %@, obj2 = %@", obj, obj2);return 0; }打印出來(lái)的結(jié)果:2015-02-05 23:20:12.871 9.NSMutableDictionary[4220:303] obj = jim, obj2 = 30
從上面的結(jié)果, 我們可以看到, 鍵不變, 改變的是值, 其實(shí)這是沒(méi)錯(cuò)的, 無(wú)論是在NSDictionary中還是NSMutableDictionary里, 只要是有相同的鍵值對(duì), 在后面的值會(huì)覆蓋掉前面的值.
當(dāng)然, 有添加那就肯定有刪除的方法, 比如:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSMutableDictionary *dic = [NSMutableDictionary dictionary];[dic setObject:@"jim" forKey:@"name"];[dic setObject:@"18" forKey:@"age"];[dic removeObjectForKey:@"name"];NSLog(@"%@", dic);return 0; }打印出來(lái)的結(jié)果:2015-02-05 23:23:36.041 9.NSMutableDictionary[4233:303] {age = 30; }
遍歷方法:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSDictionary *dic = @{@"name" : @"rose", @"age" : @"20"};NSArray *keys = [dic allKeys];for(int i = 0; i < dic.count; i++){NSString *key = keys[i];NSString *objes = dic[key];NSLog(@"%@ --- %@", key, objes);}return 0; }打印出來(lái)的結(jié)果: 2015-02-05 23:37:44.102 9.NSMutableDictionary[4272:303] name --- rose 2015-02-05 23:37:44.104 9.NSMutableDictionary[4272:303] age --- 20
里面的語(yǔ)法之前都有講過(guò), 這里就不多講了, 想知道的話(huà), 回去翻翻我之前的博文吧~~
block遍歷:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSDictionary *dic = @{@"name" : @"rose",@"age" : @"20",@"age1" : @"20",@"age2" : @"20"};[dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {NSLog(@"%@ --- %@", key, obj);}];return 0; }打印出來(lái)的結(jié)果: 2015-02-06 12:57:48.647 9.NSMutableDictionary[4473:303] age --- 20 2015-02-06 12:57:48.648 9.NSMutableDictionary[4473:303] age1 --- 20 2015-02-06 12:57:48.649 9.NSMutableDictionary[4473:303] age2 --- 20 2015-02-06 12:57:48.649 9.NSMutableDictionary[4473:303] name --- rose
看完這個(gè)block遍歷, 你應(yīng)該就明白我為什么會(huì)說(shuō)Dictionary是沒(méi)有順序了, 回想一下我們的NSArray遍歷, 在block的遍歷中, 我們看到一個(gè)Index的一個(gè)參數(shù), 而在NSDictionary中, 壓根就沒(méi)有這個(gè)參數(shù), 所以我一直強(qiáng)調(diào), Dictionary是沒(méi)有順序的.
這里補(bǔ)充一個(gè)NSDictionary的知識(shí)點(diǎn), 一個(gè)Dictionary允許有多個(gè)相同的值存在, 但不允許有多個(gè)相同的鍵存在, 下面我們來(lái)看看:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {NSDictionary *dic = @{@"name" : @"rose",@"age" : @"20",@"age1" : @"20",@"age2" : @"20"};NSArray *keys = [dic allKeys];for(int i = 0; i < dic.count; i++){NSString *key = keys[i];NSString *objes = dic[key];NSLog(@"%@ --- %@", key, objes);}return 0; }打印出來(lái)的結(jié)果: 2015-02-06 12:17:34.997 9.NSMutableDictionary[4392:303] age --- 20 2015-02-06 12:17:34.999 9.NSMutableDictionary[4392:303] age1 --- 20 2015-02-06 12:17:35.000 9.NSMutableDictionary[4392:303] age2 --- 20 2015-02-06 12:17:35.000 9.NSMutableDictionary[4392:303] name --- rose
這里同樣說(shuō)明了另一個(gè)問(wèn)題, 就是NSDictionary是沒(méi)有順序的, 看看例子看看打印出來(lái)的結(jié)果就知道了.
總結(jié):
集合
1.NSArray\NSMutableArray
?* 有序
?* 快速創(chuàng)建(不可變):@[obj1, obj2, obj3]
?* 快速訪(fǎng)問(wèn)元素:數(shù)組名[i]
?
2.NSSet\NSMutableSet
?* 無(wú)序
?
3.NSDictionary\NSMutableDictionary
?* 無(wú)序
?* 快速創(chuàng)建(不可變):@{key1 : value1,? key2 : value2}
?* 快速訪(fǎng)問(wèn)元素:字典名[key]
好了, 這次就講到這里, 下次我們繼續(xù)~~
轉(zhuǎn)載于:https://www.cnblogs.com/iOSCain/p/4282804.html
總結(jié)
以上是生活随笔為你收集整理的Foundation框架: 9.OC中的集合类之四 - NSMutableDictionary的基本认识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: swift获取通讯录
- 下一篇: Hadoop HDFS (3) JAVA