2011-06-25 29 views
1

我想知道如果我有这样的事情include?方法多少可以影响性能:使用Ruby的性能'include?'方法

array = [<array_values>]   # Read above for more information 

(0..<n_iterations>).each { |value| # Read above for more information 
    array.include?(value) 
} 

的情况下<array_values>是10,100和1.000以及<n_iterations>是10,100,1000

+1

您是否尝试在IRB/Rails控制台中运行代码? –

+0

另外,你的问题对我来说有点不清楚。你能提供一个'array'的例子吗? –

+0

@Andrew Grimm - 我如何尝试在IRB/Rails控制台中运行代码,并获取有关此事的性能时间或其他重要信息? – user502052

回答

12

使用Set(或等同于Hash)而不是阵列,以便includeO(1)而不是O(n)

或者,如果你有多个include做,你可以使用数组路口&或减法-这将会建立一个临时Hash有效地完成操作。

+1

提问者现在提示它是一个字符串数组,因此转换为Set /哈希听起来不可能。 –

+4

@Ben Alpert:为什么不呢? * *的数组可以转换为一组* *。如果使用Hash,请使用这些对象作为关键字(对于相应的值,使用'true')。请注意'Set'在内部完全是这样。 –

+0

哎呀,我的坏。我误解了(基本上)array.each {| el | el.include?值}';你完全正确。 –

1

我认为ruby-prof可能是一个很好的开始。但是,如果没有别的东西来比较这些数据,那么这些性能数据将毫无用处。如在“这种方法的性能比[其他方法]更好还是更差?”

另外,请注意,由于n_iterations数量增加超过数组的大小,此代码可能会表现更好,因为#include的绝对数量?调用。

array.each do |value| 
    (0..<n_iterations>).map.include?(value) 
end