最近遇到ruby在處理大量資料時效能低落時順便想到這個問題
用hash在大量insert array的時候做分類,怎麼樣寫會比較快
發現從hash裡面取值出來的次數越少,效能看起來越高
下面是幾個想到的用法,最後一組是直接開固定的key比較沒彈性
倒數第二組則是兼具自動建key和效能的選擇
require 'benchmark'
Benchmark.measure do
q = {}
30_000_000.times do
q['a'] = q['a'] || []
q['a'] << 2
end
end
#=> 5.08s
Benchmark.measure do
q = {}
30_000_000.times do
q['a'] ||= []
q['a'] << 2
end
end
#=> 4.4s
Benchmark.measure do
q = {}
30_000_000.times do
w = q['a']
if w.nil?
w = []
q['a'] = w
end
q['a'] << 2
end
end
#=> 3.89s
Benchmark.measure do
q = {}
30_000_000.times do
if q['a'].nil?
q['a'] = []
end
q['a'] << 2
end
end
#=> 3.79s
Benchmark.measure do
q = {}
30_000_000.times do
w = q['a']
if w.nil?
w = []
q['a'] = w
end
w << 2
end
end
#=> 2.53s
Benchmark.measure do
q = {'a' => []}
30_000_000.times do
q['a'] << 2
end
end
#=> 2.24s
留言