如何有效地搜索整数数组中的1mil数据 - ruby

时间:2017-01-20 03:50:56

标签: arrays ruby

我有一个mtd来搜索1mil或更多的记录(以asc顺序存储为整数的arraylist)来检查empID中的传递是否属于存储的其中一个记录。

目前,我使用顺序搜索for循环。如何使其更高效/更快?

def exist?(id)
    for i in 0...$employee_list.length
        if $employee_list[i] == id # match!
            return true
        elsif $employee_list[i] > id # have already gone beyond the point where id should've been found
            return false
        end
    end

return false # cannot find id in the list
end

我也尝试使用hash如下,但仍然不够快。

hash = $employee_list.map{ |i | i}

if hash.include? id
    return true 
else
    return false
end

3 个答案:

答案 0 :(得分:3)

使用$("button").click(function(){ $.ajax({url: "/path/to/rest/api", success: function(result){ $("#div1").html(result); }}); }); ,除非您已经证明您负担不起内存:

Set

无论你拥有多少个ID,它几乎是瞬间的。

答案 1 :(得分:2)

如果您无法使用Set代替Array(由于空间原因),并且Array已排序,则可以使用Array#bsearch使用返回整数的块(如<=>)。

答案 2 :(得分:1)

试试这个

array.bsearch {|x| number <=> x }

这是对数组进行二进制搜索。必须对数组进行排序。

请注意,元素x位于宇宙飞船运营商的右侧!

使用ri命令阅读有关bsearch方法的更多文档。二进制搜索的时间复杂度为O(log n)。对于长度为100万的数组,这只是20步。