最近用到字典遍历,数组遍历的有关东西用到enumeratekeysandobjectsusingblock 块枚举法来遍历起初不知道回调参数中的stop是干什么用的 后来了解到他的神奇功效
先看代码
NSDictionary *dictM2 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
[dictM2 enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@:%@",key,obj);
// *stop = YES;
}];
我们在控制台打印输出
发现字典里面的元素已经遍历完全
再看下面:
NSDictionary *dictM2 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
[dictM2 enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@:%@",key,obj);
*stop = YES;
}];
看控制台打印
如图:
我们看到当我们加入条件判断以后,在key为@“2”的时候停止了遍历
所以我们得出:在我们用enumeratekeysandobjectsusingblock对字典或者数组或者NSSet进行遍历时,如果里面元素过多时我们不需要遍历,此时我们可以用stop进行限制
既然说到遍历顺便说一下几种常用的遍历方法
- 第一种就是我们常用的for循环遍历
//////////处理数组//////////
NSArray *arrayM = @[@"1",@"2",@"3",@"4"];
NSInteger arrayMCount = [arrayM count];
for (int i = 0; i<arrayMCount; i++) {
NSString *obj = arrayM[i];
NSLog(@"%@",obj);
}
//////////处理字典//////////
NSDictionary *dictM = @{@"1":@"one",@"2":@"two",@"3":@"three"};
NSArray *dictKeysArray = [dictM allKeys];
for (int i = 0; i<dictKeysArray.count; i++) {
NSString *key = dictKeysArray[i];
NSString *obj = [dictM objectForKey:key];
NSLog(@"%@:%@",key,obj);
}
//////////处理集合//////////
NSSet * setM = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray *setObjArray = [setM allObjects];
for (int i = 0; i<setObjArray.count; i++) {
NSString *obj = setObjArray[i];
NSLog(@"%@",obj);
}
//////////反向遍历----降序遍历----以数组为例
NSArray *arrayM2 = @[@"1",@"2",@"3",@"4"];
NSInteger arrayMCount2 = [arrayM2 count] - 1;
for (NSInteger i = arrayMCount2; i>0; i--) {
NSString *obj = arrayM2[i];
NSLog(@"%@",obj);
}
- 第二种for....in 遍历
//////////处理数组//////////
NSArray *arrayM = @[@"1",@"2",@"3",@"4"];
for (id obj in arrayM) {
NSLog(@"%@",obj);
}
//////////处理字典//////////
NSDictionary *dictM = @{@"1":@"one",@"2":@"two",@"3":@"three"};
for (id obj in dictM) {
NSLog(@"%@",dictM[obj]);
}
//////////处理集合//////////
NSSet * setM = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
for (id obj in setM) {
NSLog(@"%@",obj);
}
//////////反向遍历----降序遍历----以数组为例
NSArray *arrayM2 = @[@"1",@"2",@"3",@"4"];
for (id obj in [arrayM2 reverseObjectEnumerator]) {
NSLog(@"%@",obj);
}
- 基于enumeratekeysandobjectsusingblock的遍历方式
//////////处理数组//////////
NSArray *arrayM = @[@"1",@"2",@"3",@"4"];
[arrayM enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%zd--%@",idx,obj);
}];
//////////处理字典//////////
NSDictionary *dictM = @{@"1":@"one",@"2":@"two",@"3":@"three"};
[dictM enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@:%@",key,obj);
}];
//////////处理集合//////////
NSSet * setM = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
[setM enumerateObjectsUsingBlock:^(id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
}];
//////////反向遍历----降序遍历----以数组为例
NSArray *arrayM2 = @[@"1",@"2",@"3",@"4"];
[arrayM2 enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%zd--%@",idx,obj);
}];
- 还有一种NSEnumerator不经常用就不列举了