Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #10717: benchmark_sym.rb

File benchmark_sym.rb, 0.7 kB (added by chuyeow, 8 months ago)

script used for benchmarking alternative symbolize_keys! implementation

Line 
1 class Hash
2
3   def symbolize_keys
4     inject({}) do |options, (key, value)|
5       options[(key.to_sym rescue key) || key] = value
6       options
7     end
8   end
9
10   # Destructively convert all keys to symbols.
11   def symbolize_keys_old!
12     self.replace(self.symbolize_keys)
13   end
14
15   def symbolize_keys!
16     keys.each do |key|
17       sym_key = (key.to_sym rescue key) || key
18       self[sym_key] = delete(key) unless key == sym_key
19     end
20     self
21   end
22 end
23
24
25 require 'benchmark'
26
27 hash = {}
28 'a'.upto('z') { |letter| hash[letter] = 1}
29
30 Benchmark.bmbm do |x|
31   x.report('existing symbolize_keys!') { 10000.times { hash.dup.symbolize_keys_old! } }
32   x.report('new symbolize_keys!') { 10000.times { hash.dup.symbolize_keys! } }
33 end