字典中的元素是以鍵值對的形式存儲的,鍵值對的鍵和值,都是任意的對象,但是鍵往往使用字符串,字典存儲對象的地址沒有順序,字典的遍歷分為:鍵的遍歷和值的遍歷,字典與數組的區別:數組講究順序,而字典可以快速幫助我們找到數據,數據是我們的目的,鍵是我們的手段;其中NSMutableDictionary是NSDictionary的子類,所以其擁有NSDictionary所有的功能;主要是一些常見的操作,別外一些操作見其相應的文檔,下面的代碼部分還運用的第三方插件BlocksKit相結合;
a:NSDictionary是由鍵值對(key-value)組成的數據集合
b:鍵:可以是任何對象 (通常是NSString類型的對象),同時鍵必須是單值
c:值:可以是任何對象,不能為nil
d:常用方式:我們根據鍵來查找相應值
e:字典有可變的和不可變的,可變的字典中可動態的添加和刪除元素
f:和數組不同,字典是無序的
1:NSDictionary一些常見的操作
//創建詞典 NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"wujy",@"name",@29,@"age",nil]; NSInteger Count=[dictionary count]; NSLog(@"詞典的個數為%ld",Count); //得到詞典中的所有key NSEnumerator *enumeratorkey=[dictionary keyEnumerator]; for (NSObject *obj in enumeratorkey) { NSLog(@"key為:%@",obj); NSLog(@"通過key找到value值為:%@",[dictionary objectForKey:obj]); } //得到詞典中的所有value值 NSEnumerator *enumeratorvalue=[dictionary objectEnumerator]; for (NSObject *obj in enumeratorvalue) { NSLog(@"value為:%@",obj); } //簡便的方式創建 key排前面value排后面 NSDictionary *newDictionary=@{@"name":@"wujy",@"age":@29}; NSArray *keyArray=[newDictionary allKeys]; for (NSObject *obj in keyArray) { NSLog(@"key的值為:%@",obj); } NSArray *valueArray=[newDictionary allValues]; for (NSObject *obj in valueArray) { NSLog(@"value的值為:%@",obj); } //blocks插件 NSDictionary *blockDictionary=[NSDictionary dictionaryWithObjects:[[NSArray alloc] initWithObjects:@3,@15,@29,nil] forKeys:[[NSArray alloc] initWithObjects:@"IOS",@"work",@"age",nil]]; //遍歷 [blockDictionary bk_each:^(id key, id obj) { NSLog(@"使用blocks的key為:%@",key); NSLog(@"對應的value為:%@",obj); }]; //過濾 只在第一個符合條件時就停止
NSDictionary *matchDictionary=[blockDictionary bk_match:^BOOL(id key, id obj) {
BOOL select=[obj intValue]<10?YES:NO; return select; }]; NSLog(@"match符合的項為:%@",matchDictionary); //過濾 NSDictionary *selectDictionary=[blockDictionary bk_select:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"select符合的項為%@",selectDictionary); //反向過濾 NSDictionary *rejectDictionary=[blockDictionary bk_reject:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"reject符合的項為%@",rejectDictionary); //對各個項進行修改 NSDictionary *mapDictinary=[blockDictionary bk_map:^id(id key, id obj) { return [NSNumber numberWithInt:[obj intValue]+1]; }]; NSLog(@"map修改后的項為%@",mapDictinary); //是否符合條件 返回bool BOOL isSelected=[blockDictionary bk_any:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",isSelected); //判斷是否所有的項都符合這個條件 BOOL allSelected=[blockDictionary bk_all:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",allSelected); //判斷是否所有的項都不符合這個條件 BOOL noneSelected=[blockDictionary bk_none:^BOOL(id key, id obj) { BOOL select=[obj intValue]>50?YES:NO; return select; }]; NSLog(@"%d符合條件",noneSelected);
2:NSMutableDictionary一些常見的操作
//創建一個nsmutabledictionary NSMutableDictionary *mutableDictionary=[NSMutableDictionary dictionaryWithCapacity:3]; [mutableDictionary setObject:@"wujy" forKey:@"name"]; [mutableDictionary setObject:@"cnblogs.com/wujy" forKey:@"webName"]; [mutableDictionary setObject:@29 forKey:@"age"]; //得到詞典中的所有key NSEnumerator *enumeratorkey=[mutableDictionary keyEnumerator]; for (NSObject *obj in enumeratorkey) { NSLog(@"key為:%@",obj); NSLog(@"通過key找到value值為:%@",[mutableDictionary objectForKey:obj]); } //刪除其中一個key [mutableDictionary removeObjectForKey:@"name"]; NSLog(@"刪除name的key以后值:%@",mutableDictionary); [mutableDictionary removeAllObjects]; NSLog(@"刪除所有以后,可變詞典個數為%ld",[mutableDictionary count]); //blocks //過濾 NSMutableDictionary *newmutableDictionary=[NSMutableDictionary dictionaryWithDictionary:@{@"IOS":@3,@"work":@13,@"age":@29}]; [newmutableDictionary bk_performSelect:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"過濾后的可變詞典為(29,13)%@",newmutableDictionary); //取反過濾 [newmutableDictionary bk_performReject:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"取反過濾的可變詞典為(13)%@",newmutableDictionary); //修改各個項的結果 [newmutableDictionary bk_performMap:^id(id key, id obj) { return @([obj intValue]+1); }]; NSLog(@"修改后的可變詞典為(14)%@",newmutableDictionary);
最近有個妹子弄的一個關於擴大眼界跟內含的訂閱號,每天都會更新一些深度內容,在這里如果你感興趣也可以關注一下(嘿對美女跟知識感興趣),當然可以關注后輸入:github 會有我的微信號,如果有問題你也可以在那找到我;當然不感興趣無視此信息;