码迷,mamicode.com
首页 > 其他好文 > 详细

NSArray其中的方法--遍历,

时间:2016-06-18 15:33:06      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

 

1. ForLoopFor - inenumerateObjects这个三个方法的区别:

遍历一个数组用For-in最快.

通过Value查询index的时候, 面对大量的数组推荐使用 enumerateObjectsWithOptions的并行方法.

遍历字典类型的时候, enumerateKeysAndObjectsUsingBlock效率最高

  1.1遍历数组

    
    NSMutableArray *test = [NSMutableArray array];
    for (int i = 0; i < 1000000; i ++) {
        [test addObject:@(i)];
    }
    
    //ForLoop方法
    __block int sum = 0;
    double date_s = CFAbsoluteTimeGetCurrent();
    for (int i = 0; i < test.count; i ++) {
        sum += [test[i] integerValue];
    }
    double date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"Sum : %d ForLoop Time: %f ms",sum,date_current * 1000);
    
    //For - in方法
    sum = 0;
    date_s = CFAbsoluteTimeGetCurrent();
    for (NSNumber *num in test) {
        sum += [num integerValue];
    }
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"Sum : %d For-in Time: %f ms",sum,date_current * 1000);
    
    //enumerateObjectsUsingBlock方法
    sum = 0;
    date_s = CFAbsoluteTimeGetCurrent();
    [test enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        sum += [obj integerValue];
    }];
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"Sum : %d enumrateBlock Time: %f ms",sum,date_current * 1000);

打印如下:

      技术分享

总结:遍历一个数组用For-in最快.

 

  1.2-通过Value查找Index看谁快

实验:For - inenumerateObjectsUsingBlockenumerateObjectsWithOptions 这个三个方法: (ForLoop已经不再继续讨论了) 

 

    NSMutableArray *test = [NSMutableArray array];
    for (int i = 0; i < 10000000; i ++) {
        [test addObject:@(i + 10)];
    }

    //For-in
    __block NSInteger index = 0;
    double date_s = CFAbsoluteTimeGetCurrent();
    for (NSNumber *num in test) {
        if ([num integerValue] == 9999999) {
            index = [test indexOfObject:num];
            break;
        }
    }
    double date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld For-in Time: %f ms",(long)index,date_current * 1000);

    //enumerateObjectsUsingBlock
    index = 0;
    date_s = CFAbsoluteTimeGetCurrent();
    [test enumerateObjectsUsingBlock:^(id num, NSUInteger idx, BOOL *stop) {
        if ([num integerValue] == 9999999) {
            index = idx;
            *stop = YES;
        }
    }];
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld enumerateBlock Time: %f ms",(long)index,date_current * 1000);

    //enumerateObjectsWithOptions
    index = 0;
    date_s = CFAbsoluteTimeGetCurrent();
    [test enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id num, NSUInteger idx, BOOL *stop) {
        if ([num integerValue] == 9999999) {
            index = idx;
            *stop = YES;
        }
    }];
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld enumerateObjectsWithOptions Time: %f ms",(long)index,date_current * 1000);

 

打印:

  技术分享

结论:通过Value查询index的时候, 面对大量的数组推荐使用 enumerateObjectsWithOptions的并行方法.

 

  1.3遍历字典

这里我们比较一下使用 For-in 和 enumerateKeysAndObjectsUsingBlock 这个两个方法:

 

    NSDictionary *testDictionary = @{
                                     @"Auther" : @"yyyyy",
                                     @"Game" : @"Dota",
                                     @"App" : @"dddddd",
                                     @"Market" : @"AppStore"
                                     };
    
    NSMutableArray *forInArry1 = [NSMutableArray array];
    NSMutableArray *forInArry2 = [NSMutableArray array];
    NSMutableArray *enumArry = [NSMutableArray array];
    
    
    //For - in方法 直接allValues
    double date_s = CFAbsoluteTimeGetCurrent();
    NSArray *values = testDictionary.allValues;
    for (NSString *value in values) {
        [forInArry1 addObject:value];
    }
    double date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld For-in-forInArry1 Time: %f ms",(long)index,date_current * 1000);
    
    //For - in方法,+根据key取value值
    date_s = CFAbsoluteTimeGetCurrent();
    NSArray *keys = testDictionary.allKeys;
    for (NSString *key in keys) {
                NSString *Value = testDictionary[key];
        [forInArry2 addObject:Value];
    }
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld For-in-forInArry2 Time: %f ms",(long)index,date_current * 1000);
    
    //enumerateKeysAndObjectsUsingBlock方法.
    date_s = CFAbsoluteTimeGetCurrent();
    [testDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        [enumArry addObject:obj];
    }];
    date_current = CFAbsoluteTimeGetCurrent() - date_s;
    NSLog(@"index : %ld enumerateKeysAndObjectsUsingBlock Time: %f ms",(long)index,date_current * 1000);
    

 

打印:

 

技术分享

 

结论:遍历字典类型的时候, enumerateKeysAndObjectsUsingBlock效率最高

NSArray其中的方法--遍历,

标签:

原文地址:http://www.cnblogs.com/jiayongqiang/p/5596154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!