1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
require 'benchmark'
class Hash
def slice1(*keep_keys)
h = {}
keep_keys.each do |key|
h[key] = fetch(key)
end
h
end
def except1(*less_keys)
slice1(*keys - less_keys)
end
def slice2(*keys)
Hash[select {|k,v| keys.include? k}]
end
def except2(*keys)
reject {|k,v| keys.include? k}
end
end
#
Benchmark.bmbm do |x|
n = 10
a = (0..1000).to_a
h = (0..10000).inject({}){|h, e| h[e] = e ; h}
# slice
x.report("slice1") do
n.times do
h.slice1(*a)
end
end
#x.report("slice2") do
# n.times do
# h.slice2(*a)
# end
#end
# except
x.report("except1") do
n.times do
h.except1(*a)
end
end
x.report("except2") do
n.times do
h.except2(*a)
end
end
end
|