iOS 字典遍历enumeratekeysandobjectsusingblock stop是干什么

最近用到字典遍历,数组遍历的有关东西用到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;
    }];

我们在控制台打印输出

iOS 字典遍历enumeratekeysandobjectsusingblock stop是干什么_第1张图片
屏幕快照 2017-08-10 下午8.10.57.png

发现字典里面的元素已经遍历完全

再看下面:
 NSDictionary  *dictM2 = @{@"1":@"one",@"2":@"two",@"3":@"three"};
    [dictM2 enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"%@:%@",key,obj);
        *stop = YES;
    }];

看控制台打印

iOS 字典遍历enumeratekeysandobjectsusingblock stop是干什么_第2张图片
屏幕快照 2017-08-10 下午8.21.37.png
发现只是遍历了第一个键值对, 说明当stop为yes时,就会停止遍历,所以我们可以在块中加入条件(即当某种条件下去停止遍历)。

如图:

iOS 字典遍历enumeratekeysandobjectsusingblock stop是干什么_第3张图片
屏幕快照 2017-08-10 下午8.41.53.png

我们看到当我们加入条件判断以后,在key为@“2”的时候停止了遍历

所以我们得出:在我们用enumeratekeysandobjectsusingblock对字典或者数组或者NSSet进行遍历时,如果里面元素过多时我们不需要遍历,此时我们可以用stop进行限制

既然说到遍历顺便说一下几种常用的遍历方法

  • 第一种就是我们常用的for循环遍历
//////////处理数组//////////
    NSArray *arrayM = @[@"1",@"2",@"3",@"4"];
    NSInteger arrayMCount = [arrayM count];
    for (int i = 0; i0; 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不经常用就不列举了

你可能感兴趣的:(iOS 字典遍历enumeratekeysandobjectsusingblock stop是干什么)