Created
November 16, 2018 10:59
-
-
Save vasilakisfil/6bd0375681ba65d8b6fa1d3cf2e720bd to your computer and use it in GitHub Desktop.
Accessing a hash value by key is extremely fast. Is it possible to access the value of the first key with the same performance ?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark/ips' | |
require 'faker' | |
_hash = 100.times.inject({}){|hash, i| | |
hash[Faker::Lorem.word] = Faker::Lorem.word | |
hash | |
} | |
_hash[:aaa] = 'a' | |
HASH = _hash | |
def first_key1 | |
HASH.keys.first | |
end | |
def first_key2 | |
HASH.first[0] | |
end | |
def first_key3 | |
HASH[:aaaa] | |
end | |
Benchmark.ips do |x| | |
x.report('first_key1') { first_key1 } | |
x.report('first_key2') { first_key2 } | |
x.report('first_key3') { first_key3 } | |
x.compare! | |
end | |
#Warming up -------------------------------------- | |
# first_key1 198.267k i/100ms | |
# first_key2 181.968k i/100ms | |
# first_key3 340.302k i/100ms | |
#Calculating ------------------------------------- | |
# first_key1 3.171M (± 4.8%) i/s - 15.861M in 5.014686s | |
# first_key2 2.599M (± 9.4%) i/s - 12.920M in 5.022006s | |
# first_key3 8.260M (±17.7%) i/s - 39.475M in 5.004442s | |
# | |
#Comparison: | |
# first_key3: 8260385.4 i/s | |
# first_key1: 3171219.2 i/s - 2.60x slower | |
# first_key2: 2599325.1 i/s - 3.18x slower | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment