2
我正在处理一些大型数据集,并试图提高性能。我需要确定一个对象是否包含在一个数组中。我正在考虑使用index
或include?
,所以我对两者都进行了基准测试。为什么array.index比array.include更快?
require 'benchmark'
a = (1..1_000_000).to_a
num = 100_000
reps = 100
Benchmark.bmbm do |bm|
bm.report('include?') do
reps.times { a.include? num }
end
bm.report('index') do
reps.times { a.index num }
end
end
令人惊讶的是(对我而言),index
速度相当快。
user system total real
include? 0.330000 0.000000 0.330000 ( 0.334328)
index 0.040000 0.000000 0.040000 ( 0.039812)
由于index
比include?
提供更多信息,我会希望它是稍微慢一些,如果有的话,虽然这种情况并非如此。为什么它更快?
(我知道index
直接从数组类来临,include?
从可枚举继承。也许解释了吗?)
尼斯捕捞的讨论,它不清醒时立即给我。我认为你应该向MRI提交一个问题。 – 2014-09-11 06:02:26
相关:http://stackoverflow.com/questions/23729175/what-is-the-purpose-of-arrayinclude-as-compared-to-arrayindex – sawa 2014-09-11 06:15:12
@undur_gongor谢谢。 [完成](https://bugs.ruby-lang.org/issues/10227)。 – Sparhawk 2014-09-11 06:35:21