我很少使用reverse_each
方法,相反当我需要倒序遍历数组时,我会调用reverse.each
。所以我做了一些基准测试,结果发现reverse_each
比reverse.each
快得多。
- 这是因为使用
reverse.each
在迭代之前需要创建一个反向数组的时间因素吗?
然而,在我的示例(如下所示)中进行了1000万次迭代,对于大小为4的数组,TIME(reverse) + TIME(each) - TIME(reverse.each) ~ 1.2秒
。无论数组的大小如何,这种时间差异都保持得比较稳定。我已经测试过100个元素的情况。
- 是什么导致了这一秒钟的差异?
require 'benchmark'
number = 10000000
arr = (1..4).to_a
Benchmark.bm(13) do |x|
x.report("reverse.each") { number.times { arr.reverse.each {|x| x} } }
x.report("reverse_each") { number.times { arr.reverse_each {|x| x} } }
x.report("reverse") { number.times { arr.reverse } }
x.report("each") { number.times { arr.each {|x| x} } }
end