.map { |x| x.hoge } と .map(&:hoge) のパフォーマンス
.map(&:hoge)
は短く書けて良いですよね。
.map { |x| x.hoge }
と .map(&:hoge)
のパフォーマンスが気になったので少し調べてみました。
コード:
require 'benchmark'
arr = Hoge.all # count: 200
Benchmark.bm do |x|
x.report do
10000.times { arr.map { |a| a.id } }
end
x.report do
10000.times { arr.map(&:id) }
end
end
結果:
user system total real
1.290000 0.000000 1.290000 ( 1.296815)
1.300000 0.000000 1.300000 ( 1.491210)
前者の方が若干速い、という結果になりました。
ただ、全部がそのような結果になるかというとそうでもなくて、例えば to_s
する処理だと後者の処理が若干速いみたいです。
コード:
require 'benchmark'
arr = Array.new(100) { |i| i }
Benchmark.bm do |x|
x.report do
10000.times { arr.map { |x| x.to_s } }
end
x.report do
10000.times { arr.map(&:to_s) }
end
end
結果:
user system total real
0.310000 0.000000 0.310000 ( 0.329866)
0.240000 0.000000 0.240000 ( 0.241115)
使い分けが難しいですね... 微々たる差ですし、どちらを使っても良いと思います。