美文网首页
快速查找数组内元素的方法

快速查找数组内元素的方法

作者: 白菜松 | 来源:发表于2017-08-28 14:01 被阅读16次

数组是编程常用的变量,数组内寻值也时日常操作。话说那种方法更快呢。
下面是白菜知道的几种方法:

生成一个随机数组,intSearch最多会随机出现一次

-(void)sort{
    
    
    NSMutableArray *arrOrder=[NSMutableArray arrayWithCapacity:0];
    
    NSInteger intTimes = 1;
    NSInteger intEnd = 10000;
    //生成一个随机数组,intSearch会随机出现一次
    NSInteger intSearch = arc4random()%intEnd;
    
    BOOL isHave = NO;
    while (intTimes <= intEnd)
    {
        NSInteger intRandom = arc4random()%intEnd;
        if (intRandom == intSearch) {
            [arrOrder addObject:isHave? @(intSearch+1):@(intSearch)];
            isHave = YES;
        } else {
            [arrOrder addObject:@(intRandom)];
        }
        
        
        intTimes++;
    }
    
    //    NSLog(@"intSearch = %zd, arrOrder = %@", intSearch, arrOrder);
    
    
    NSDate *dateCurrent = [NSDate date];
    //方法1
    if ([arrOrder indexOfObject:@(intSearch)] != NSNotFound) {
        _times ++;
        CGFloat sec =  [[NSDate date] timeIntervalSinceDate:dateCurrent];
        NSLog(@"第%zd次,sec1 = %f", _times, sec);
    }
    
    //方法2
    dateCurrent = [NSDate date];
    [arrOrder enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        if ([obj integerValue] == intSearch) {
            
            CGFloat sec =  [[NSDate date] timeIntervalSinceDate:dateCurrent];
            NSLog(@"第%zd次,sec2 = %f", _times, sec);
        }
    }];
    
    
    //方法3
    dateCurrent = [NSDate date];
    
    dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_apply([arrOrder count], queue, ^(size_t index) {
        
        if ([arrOrder[index] integerValue] == intSearch) {
            
            CGFloat sec =  [[NSDate date] timeIntervalSinceDate:dateCurrent];
            NSLog(@"第%zd次,sec3 = %f", _times, sec);
        }
    });
    
    
}

100条数据

2017-08-28 13:54:38.020 examples[97490:5270031] 第1次,sec1 = 0.000015
2017-08-28 13:54:38.020 examples[97490:5270031] 第1次,sec2 = 0.000010
2017-08-28 13:54:38.020 examples[97490:5270031] 第1次,sec3 = 0.000025
2017-08-28 13:54:39.901 examples[97490:5270031] 第2次,sec1 = 0.000007
2017-08-28 13:54:39.901 examples[97490:5270031] 第2次,sec2 = 0.000008
2017-08-28 13:54:39.901 examples[97490:5270031] 第2次,sec3 = 0.000026
2017-08-28 13:54:45.766 examples[97490:5270031] 第3次,sec1 = 0.000004
2017-08-28 13:54:45.766 examples[97490:5270031] 第3次,sec2 = 0.000003
2017-08-28 13:54:45.767 examples[97490:5270031] 第3次,sec3 = 0.000018

1000条数据

2017-08-28 13:55:18.061 examples[97515:5271284] 第1次,sec1 = 0.000033
2017-08-28 13:55:18.062 examples[97515:5271284] 第1次,sec2 = 0.000052
2017-08-28 13:55:18.062 examples[97515:5271342] 第1次,sec3 = 0.000046
2017-08-28 13:55:19.661 examples[97515:5271284] 第2次,sec1 = 0.000004
2017-08-28 13:55:19.661 examples[97515:5271284] 第2次,sec2 = 0.000005
2017-08-28 13:55:19.661 examples[97515:5271284] 第2次,sec3 = 0.000021
2017-08-28 13:55:28.231 examples[97515:5271284] 第3次,sec1 = 0.000033
2017-08-28 13:55:28.232 examples[97515:5271284] 第3次,sec2 = 0.000032
2017-08-28 13:55:28.232 examples[97515:5271375] 第3次,sec3 = 0.000044

10000条数据

2017-08-28 14:00:00.034 examples[97585:5276437] 第1次,sec2 = 0.000489
2017-08-28 14:00:00.035 examples[97585:5276736] 第1次,sec3 = 0.000204
2017-08-28 14:00:11.082 examples[97585:5276437] 第2次,sec1 = 0.000304
2017-08-28 14:00:11.082 examples[97585:5276437] 第2次,sec2 = 0.000299
2017-08-28 14:00:11.083 examples[97585:5276789] 第2次,sec3 = 0.000178
2017-08-28 14:00:28.069 examples[97585:5276437] 第3次,sec1 = 0.000138
2017-08-28 14:00:28.069 examples[97585:5276437] 第3次,sec2 = 0.000201
2017-08-28 14:00:28.070 examples[97585:5276906] 第3次,sec3 = 0.000095

经过测试发现,数组数量越大,方法3相对比较效率更高。2000条是个大概的分界点,小于2000时前面的两个方法用时更短,大于2000时则方法3更快。

相关文章

  • 快速查找数组内元素的方法

    数组是编程常用的变量,数组内寻值也时日常操作。话说那种方法更快呢。下面是白菜知道的几种方法: 生成一个随机数组,i...

  • ES6几个好用的数组操作方法

    Array.from() :将json数组格式转换成数组 find() 示例方法,用于查找数组内的某个元素 fil...

  • 数组扩展和数学函数

    ES5 数组拓展 .indexOf(element) 顾名思义,这个方法用于查找数组内指定元素位置,查找到第一个后...

  • ES5数组方法

    ES5为Array做了大幅拓展 .indexOf / .lastIndexof 该方法用于查找数组内指定元素的位置...

  • Rreact Native/JS 数组添加/删除/替换元素 合并

    数组添加元素 数组删除元素 数组替换元素 数组合并 查找元素在数组中的位置 将数组内所有元素按指定字符拼接成字符串

  • 查找元素

    查找某个元素在数组中位置 indexOf()方法

  • Dart 在List数组中查找指定元素

    在List数组中查找指定元素 使用indexOf 方法

  • 07.常见数据结构(数组)

    数组 数组,采用该结构的集合,对元素的存取有如下的特点:查找元素快:通过索引,可以快速访问指定位置的元素增删元素慢...

  • 常见JS编程题

    1、查找数组中重复元素 方法1:创建一个新的临时数组来保存数组中已有的元素 方法2: 使用indexOf判断数组元...

  • es6常用的几个循环方法

    1.find 方法描述: 该方法主要应用于查找第一个符合条件的数组元素,即返回通过测试(函数内判断)的数组的第一个...

网友评论

      本文标题:快速查找数组内元素的方法

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