字典中的元素是以鍵值對(duì)的形式存儲(chǔ)的,鍵值對(duì)的鍵和值,都是任意的對(duì)象,但是鍵往往使用字符串,字典存儲(chǔ)對(duì)象的地址沒(méi)有順序,字典的遍歷分為:鍵的遍歷和值的遍歷,字典與數(shù)組的區(qū)別:數(shù)組講究順序,而字典可以快速幫助我們找到數(shù)據(jù),數(shù)據(jù)是我們的目的,鍵是我們的手段;其中NSMutableDictionary是NSDictionary的子類,所以其擁有NSDictionary所有的功能;主要是一些常見(jiàn)的操作,別外一些操作見(jiàn)其相應(yīng)的文檔,下面的代碼部分還運(yùn)用的第三方插件BlocksKit相結(jié)合;
a:NSDictionary是由鍵值對(duì)(key-value)組成的數(shù)據(jù)集合
b:鍵:可以是任何對(duì)象 (通常是NSString類型的對(duì)象),同時(shí)鍵必須是單值
c:值:可以是任何對(duì)象,不能為nil
d:常用方式:我們根據(jù)鍵來(lái)查找相應(yīng)值
e:字典有可變的和不可變的,可變的字典中可動(dòng)態(tài)的添加和刪除元素
f:和數(shù)組不同,字典是無(wú)序的
1:NSDictionary一些常見(jiàn)的操作
//創(chuàng)建詞典 NSDictionary *dictionary=[NSDictionary dictionaryWithObjectsAndKeys:@"wujy",@"name",@29,@"age",nil]; NSInteger Count=[dictionary count]; NSLog(@"詞典的個(gè)數(shù)為%ld",Count); //得到詞典中的所有key NSEnumerator *enumeratorkey=[dictionary keyEnumerator]; for (NSObject *obj in enumeratorkey) { NSLog(@"key為:%@",obj); NSLog(@"通過(guò)key找到value值為:%@",[dictionary objectForKey:obj]); } //得到詞典中的所有value值 NSEnumerator *enumeratorvalue=[dictionary objectEnumerator]; for (NSObject *obj in enumeratorvalue) { NSLog(@"value為:%@",obj); } //簡(jiǎn)便的方式創(chuàng)建 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(@"對(duì)應(yīng)的value為:%@",obj); }]; //過(guò)濾 只在第一個(gè)符合條件時(shí)就停止
NSDictionary *matchDictionary=[blockDictionary bk_match:^BOOL(id key, id obj) {
BOOL select=[obj intValue]<10?YES:NO; return select; }]; NSLog(@"match符合的項(xiàng)為:%@",matchDictionary); //過(guò)濾 NSDictionary *selectDictionary=[blockDictionary bk_select:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"select符合的項(xiàng)為%@",selectDictionary); //反向過(guò)濾 NSDictionary *rejectDictionary=[blockDictionary bk_reject:^BOOL(id key, id obj) { BOOL select=[obj intValue]>10?YES:NO; return select; }]; NSLog(@"reject符合的項(xiàng)為%@",rejectDictionary); //對(duì)各個(gè)項(xiàng)進(jìn)行修改 NSDictionary *mapDictinary=[blockDictionary bk_map:^id(id key, id obj) { return [NSNumber numberWithInt:[obj intValue]+1]; }]; NSLog(@"map修改后的項(xiàng)為%@",mapDictinary); //是否符合條件 返回bool BOOL isSelected=[blockDictionary bk_any:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",isSelected); //判斷是否所有的項(xiàng)都符合這個(gè)條件 BOOL allSelected=[blockDictionary bk_all:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"%d符合條件",allSelected); //判斷是否所有的項(xiàng)都不符合這個(gè)條件 BOOL noneSelected=[blockDictionary bk_none:^BOOL(id key, id obj) { BOOL select=[obj intValue]>50?YES:NO; return select; }]; NSLog(@"%d符合條件",noneSelected);
2:NSMutableDictionary一些常見(jiàn)的操作
//創(chuàng)建一個(gè)nsmutabledictionary NSMutableDictionary *mutableDictionary=[NSMutableDictionary dictionaryWithCapacity:3]; [mutableDictionary setObject:@"wujy" forKey:@"name"]; [mutableDictionary setObject:@"VEVb.com/wujy" forKey:@"webName"]; [mutableDictionary setObject:@29 forKey:@"age"]; //得到詞典中的所有key NSEnumerator *enumeratorkey=[mutableDictionary keyEnumerator]; for (NSObject *obj in enumeratorkey) { NSLog(@"key為:%@",obj); NSLog(@"通過(guò)key找到value值為:%@",[mutableDictionary objectForKey:obj]); } //刪除其中一個(gè)key [mutableDictionary removeObjectForKey:@"name"]; NSLog(@"刪除name的key以后值:%@",mutableDictionary); [mutableDictionary removeAllObjects]; NSLog(@"刪除所有以后,可變?cè)~典個(gè)數(shù)為%ld",[mutableDictionary count]); //blocks //過(guò)濾 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(@"過(guò)濾后的可變?cè)~典為(29,13)%@",newmutableDictionary); //取反過(guò)濾 [newmutableDictionary bk_performReject:^BOOL(id key, id obj) { BOOL select=[obj intValue]>20?YES:NO; return select; }]; NSLog(@"取反過(guò)濾的可變?cè)~典為(13)%@",newmutableDictionary); //修改各個(gè)項(xiàng)的結(jié)果 [newmutableDictionary bk_performMap:^id(id key, id obj) { return @([obj intValue]+1); }]; NSLog(@"修改后的可變?cè)~典為(14)%@",newmutableDictionary);
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注