Skip to content

Instantly share code, notes, and snippets.

@toothrot
Created May 17, 2011 20:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toothrot/977376 to your computer and use it in GitHub Desktop.
Save toothrot/977376 to your computer and use it in GitHub Desktop.
set vs array
require 'benchmark'
require 'set'
some_numbers = []
1_000_000.times do
num = rand(100_000)
rand(5).times do
some_numbers << {:id => num}
end
end
Benchmark.bmbm do |x|
x.report("set") do
some_numbers.inject(Set.new) do |set, numbers|
set << numbers[:id]
end
end
x.report("array") do
some_numbers.inject([]) do |array, numbers|
foo = numbers[:id]
array << numbers[:id] if array.last != numbers[:id]
array
end
end
end
__END__
Rehearsal -----------------------------------------
set 2.660000 0.010000 2.670000 ( 2.675109)
array 2.740000 0.010000 2.750000 ( 2.751495)
-------------------------------- total: 5.420000sec
user system total real
set 2.620000 0.000000 2.620000 ( 2.627769)
array 2.550000 0.010000 2.560000 ( 2.567725)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment