我有一个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
答案 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步。