枚举器

作者: 楼船夜雪_WL | 来源:发表于2019-07-01 16:54 被阅读0次

    1、枚举器是一种苹果官方推荐的更加面向对象的一种遍历方式,相比于for循环,它具有高度解耦、面向对象、使用方便等优势

    2、for in、经典for循环和EnumerateObjectsUsingBlock 的比较:

    2.1、对于集合中对象数很多的情况下,for in 的遍历速度非常之快,但小规模的遍历并不明显(还没普通for循环快)
    2.2、Value查询index的时候, 面对大量的数组推荐使用 enumerateObjectsWithOptions的并行方法.

    2.3、遍历字典类型的时候, 推荐使用enumerateKeysAndObjectsUsingBlock,block版本的字典遍历可以同时取key和value(forin只能取key再手动取value)

    //数组枚举
    [@[@"1",@"2",@"3",@"1",@"2",@"3",@"1",@"2",@"3",@"100",@"2",@"83",@"1",@"2",@"-3"] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj integerValue] == 100) {
    NSLog(@"===%ld===",idx);
    }
    }];

    //for-in 快速枚举
    NSMutableArray * arr = @[@1,@2,@3,@4,@5].mutableCopy;
    for (NSNumber *obj in arr) {
    

    // if ([obj integerValue] == 2) {
    // [arr addObject:@"6"];
    // }
    NSLog(@"%@",obj);
    }

    NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"obj1",@"key1",@"obj2",@"key2",@"obj3",@"key3" ,nil];
    [dic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"===%@====%@",key,obj);
        if ([key isEqualToString:@"key2"]) {
            *stop = YES;
        }
    }];
    

    参考:(https://www.jianshu.com/p/5d4a8be9baf7)
    ** [https://www.jianshu.com/p/c45f928b0519]

    相关文章

      网友评论

        本文标题:枚举器

        本文链接:https://www.haomeiwen.com/subject/wjagcctx.html