阵列优化:什么更贵?

gmi*_*ile 2 ruby arrays optimization

以下哪些代码更贵?

x = my_array.inject {|sum,i| int+=i }
Run Code Online (Sandbox Code Playgroud)

要么

x = eval(my_array.join('+'))
Run Code Online (Sandbox Code Playgroud)

Tel*_*hus 12

试试看:

#!/usr/local/bin/ruby -w
require 'benchmark'
iterations = 1000000

Benchmark.bmbm do |bench|
  numbers = (1..100).to_a

  bench.report('inject') do
    x = numbers.inject { |sum, num| sum + num }
  end
  bench.report('eval') do
    x = eval(numbers.join('+'))
  end
end
Run Code Online (Sandbox Code Playgroud)

这使:

telemachus ~ $ ruby bench.rb 
Rehearsal ------------------------------------------
inject   0.000000   0.000000   0.000000 (  0.000029)
eval     0.000000   0.000000   0.000000 (  0.000261)
--------------------------------- total: 0.000000sec

             user     system      total        real
inject   0.000000   0.000000   0.000000 (  0.000047)
eval     0.000000   0.000000   0.000000 (  0.000186)
Run Code Online (Sandbox Code Playgroud)

但实际上,我认为你是微观优化的.inject除非效率非常低,否则我会使用它,因为它是为方法构建的.

另外我认为你的代码inject有两个问题.首先,你的意思是int,你的意思是sum.其次,您可以简单地添加项目,而不是使用+=.第一个inject自动累积值的参数.