当你只有一把锤子时,一切看起来都像钉子。在发现and和其他可迭代方法Array#each
的实用性、优雅性和语法乐趣之前,可以这样说Ruby 中的方法。我好奇的是:Array#map
Array#select
为什么使用更精确的可迭代方法时性能会实际提高?总体来说这是真的吗?
例如,在
require 'benchmark'
array = (1..100000).to_a
puts Benchmark.measure {
100.times do
array.map { |el| el.even? }
end
}
puts Benchmark.measure {
100.times do
new_array = []
array.each do |el|
new_array << el.even?
end
end
}
# ruby bench.rb
# 0.450598 0.015524 0.466122 ( 0.466802)
# 0.496796 0.018525 0.515321 ( 0.516196)
Run Code Online (Sandbox Code Playgroud)
Benchmark
总是表现出有利于 的时间性能差异Array#map
。在下面的代码中:
puts Benchmark.measure {
100.times do
array.select { |el| el.even? }
end
}
puts Benchmark.measure {
100.times do
new_array …
Run Code Online (Sandbox Code Playgroud)