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自动累积值的参数.