IOS字典NSDictionary與NSMutableDictionary知識點,iosnsdictionary
字典中的元素是以索引值對的形式儲存的,索引值對的鍵和值,都是任意的對象,但是鍵往往使用字串,字典儲存物件的地址沒有順序,字典的遍曆分為:鍵的遍曆和值的遍曆,字典與數組的區別:數組講究順序,而字典可以快速協助我們找到資料,資料是我們的目的,鍵是我們的手段;其中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);