Skip to content

Instantly share code, notes, and snippets.

@rsiddle
Last active October 8, 2023 07:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rsiddle/a87df54191b6b9dfe7c9 to your computer and use it in GitHub Desktop.
Save rsiddle/a87df54191b6b9dfe7c9 to your computer and use it in GitHub Desktop.
Hash vs. Array vs. Set
require 'benchmark'
require 'set'
Document = Struct.new(:id,:a,:b,:c)
documents_a = []
documents_h = {}
documents_s = Set.new
1.upto(10_000) do |n|
d = Document.new(n)
documents_a << d
documents_h[d.id] = d
documents_s << d
end
searchlist = Array.new(1000){ rand(10_000)+1 }
Benchmark.bm(10) do |x|
x.report('array') {searchlist.each{|el| documents_a.any?{|d| d.id == el}} }
x.report('hash') {searchlist.each{|el| documents_h.has_key?(el)} }
x.report('set') {searchlist.each{|el| documents_s.include?(el)} }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment