美文网首页
IOS 循环遍历的几种方式和简单效率分析

IOS 循环遍历的几种方式和简单效率分析

作者: 沐心沐翡 | 来源:发表于2023-09-20 14:57 被阅读0次

测试代码以简单输出数字文本为例子: 

 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSIntegerten_total =5;

        NSIntegertotal =powl(10, ten_total);

        NSMutableArray *array = [NSMutableArray array];

        for(inti =0; i < total; i++) {

            [arrayaddObject:[NSStringstringWithFormat:@"%@",@(i)]];

        }

        [self forRoopOne:array];

        [self forRoopInTwo:array];

        [self forRoopThree:array];

        [self forRoopFour:array];

        [self forRoopFive:array];

    });

常见的五种遍历方法(也可分为四种while算一种),如下:

- (void)forRoopOne:(NSArray *)params {

    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

    for(inti =0; i < params.count; i++) {

        NSString *item = params[i];

        NSLog(@"当前的数据为%@",item);

    }

    CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();

    NSLog(@" 1: 普通for循环 time cost: %0.3f", endTime - startTime);

}

- (void)forRoopInTwo:(NSArray *)params {

    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

    for(NSString *iteminparams) {

        NSLog(@"当前的数据为%@",item);

    }

    CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();

    NSLog(@" 2: for-in循环 time cost: %0.3f", endTime - startTime);

}

- (void)forRoopThree:(NSArray *)params {

    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

    NSIntegerindex =0;

    while(index < params.count) {

        NSString *item = params[index];

        NSLog(@"当前的数据为%@",item);

        index ++;

    }

    CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();

    NSLog(@" 3: while 循环 time cost: %0.3f", endTime - startTime);

}

- (void)forRoopFour:(NSArray*)params {

    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

    [paramsenumerateObjectsUsingBlock:^(id  _Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop) {

        NSString*item = obj;

        NSLog(@"当前的数据为%@",item);

    }];

    CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();

    NSLog(@" 4: enumerateObjectsUsingBlock 循环 time cost: %0.3f", endTime - startTime);

}

- (void)forRoopFive:(NSArray*)params {

    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

    NSEnumerator*enumerator = [paramsobjectEnumerator];

    while(enumerator.nextObject) {

        NSLog(@"当前的数据为%@",@(11111));

    }

    CFAbsoluteTime endTime = CFAbsoluteTimeGetCurrent();

    NSLog(@" 5: NSEnumerator 循环 time cost: %0.3f", endTime - startTime);

}

1.  数据设置为10条时,执行时间 如下:

  总数10  1: 普通for循环 time cost: 0.001

 总数10  2: for-in循环 time cost: 0.004

 总数10  3: while 循环 time cost: 0.001

 总数10  4: enumerateObjectsUsingBlock 循环 time cost: 0.001

 总数10  5: NSEnumerator 循环 time cost: 0.000

2. 数据设置为100条时,执行时间如下:

  总数100  1: 普通for循环 time cost: 0.010

   总数100  2: for-in循环 time cost: 0.005

  总数100  3: while 循环 time cost: 0.005

  总数100  4: enumerateObjectsUsingBlock 循环 time cost: 0.005

  总数100  5: NSEnumerator 循环 time cost: 0.003

3.数据设置为1000条时,执行时间如下:

 总数1000  1: 普通for循环 time cost: 0.113

  总数1000  2: for-in循环 time cost: 0.107

  总数1000  3: while 循环 time cost: 0.104

 总数1000  4: enumerateObjectsUsingBlock 循环 time cost: 0.072

 总数1000  5: NSEnumerator 循环 time cost: 0.061

4.数据设置为10000条时,执行时间如下:

  总数10000  1: 普通for循环 time cost: 1.151

  总数10000  2: for-in循环 time cost: 1.505

   总数10000  3: while 循环 time cost: 1.872

   总数10000  4: enumerateObjectsUsingBlock 循环 time cost: 0.793

  总数10000  5: NSEnumerator 循环 time cost: 0.410

5.数据设置为100000条时,执行时间如下:

 总数100000  1: 普通for循环 time cost: 7.610

 总数100000  2: for-in循环 time cost: 7.473

 总数100000  3: while 循环 time cost: 7.521

 总数100000  4: enumerateObjectsUsingBlock 循环 time cost: 7.360

 总数100000  5: NSEnumerator 循环 time cost: 3.711

综上所述,对比输出结果,存在以下结论:

1. 数据量小时,几种循环方案可随意选择,按照习惯来即可;

2. 数据量大时,for-in可满足日常的使用,或用enumerateObjectsUsingBlock;

3. NSEnumerator用法效率最高;

相关文章

  • 数组遍历只有for循环吗

    当遇到大数据量需要遍历的时候,不得不考虑遍历的效率问题。研究了一下数组遍历方法和效率。总的来说,循环遍历有这么几种...

  • iOS几种遍历方式及效率

    对于iOS的几种遍历效率,大多数开发过程中都不会去做强制要求,因为遍历本身效率就是很高的,对于小数据而言更是没有必...

  • 从源码解读Java列表的遍历效率

    Java列表应该如何遍历效率更好? Java有三种遍历的方式: 普通for循环遍历(for) 增强型for循环遍历...

  • javascript 循环遍历总结

    javascript 有以下几种循环遍历方式: 1、for 循环 let arr = [1,2,3]; for (...

  • [Swift] Swift 中的遍历

    在 Swift 中实现循环/遍历有如下几种方式: 1.1 for-in 1.1.1 遍历区间 1.1.1.1 顺序...

  • JS Related

    JS几种数组遍历方式以及性能分析对比 javascript中in和hasOwnProperty区别

  • js 循环遍历几种方式

    1. for循环 2. forEach()方法 3. for...in方法 for...in循环有几个缺点: 数组...

  • 2018 iOS面试题

    1、写出NSArray的几种遍历方式 答: for循环 、for...in 2、类方法和实例方法有什么区别? 答:...

  • OC优雅的数组过滤-项目常用

    OC优雅的数组过滤-项目常用,和循环遍历判断say no。但是其大数据遍历效率比循环遍历效率低。 更多谓词使用:i...

  • iOS 几种遍历方式

    我们在平常开发编写代码的时候,都习惯啦使用for循环来遍历集合。今天我来分享一下用别的写法遍历集合。下面以数组为例...

网友评论

      本文标题:IOS 循环遍历的几种方式和简单效率分析

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