站在巨人的肩膀上砚蓬,從前輩那里拿來(lái)的經(jīng)驗(yàn)侣灶。
結(jié)論1:當(dāng)只是遍歷NSArray的時(shí)候使用For-in會(huì)比較快速, 推薦使用For-in遍歷數(shù)組.
結(jié)論2:當(dāng)我們想遍歷NSDictionary的時(shí)候, 推薦使用enumerateKeysAndObjectsUsingBlock
不僅僅是因?yàn)樗俣瓤? 更是因?yàn)榇a更優(yōu)雅和直觀.
使用block同時(shí)遍歷字典key躲庄,value
block版本的字典遍歷可以同時(shí)取key和value(forin只能取key再手動(dòng)取value)式塌,如:
NSDictionary?*dict?=?@{@"a":?@"1",?@"b":?@"2"};
[dict?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{
NSLog(@"key:?%@,?value:?%@",?key,?obj);
}];
對(duì)于耗時(shí)且順序無(wú)關(guān)的遍歷寥枝,使用并發(fā)版本
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key,id obj,BOOL *stop) {
NSLog(@"key:%@-----value:%@----",key,obj);
}];
對(duì)于數(shù)組
NSArray*array =@[@"1",@"2",@"3",@"4",@"5"];
[array
enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BOOL * stop) {
NSLog(@"1:%@----%d",obj,(int)idx);
}];
//并發(fā)遍歷(與CPU的核數(shù)有關(guān))
[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj,NSUInteger idx,BOOL * stop) {
NSLog(@"2:%@----%d",obj,(int)idx);
}];
//倒序遍歷
for(NSString *string in [array reverseObjectEnumerator]) {
NSLog(@"12:%@----",string);
}
//倒序遍歷
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj,NSUInteger idx,BOOL* stop) {
NSLog(@"13:%@----%d",obj,(int)idx);
}];