Upgradingdave
Upgradingdave

Reputation: 13056

Possible to access the index in a Hash each loop?

I'm probably missing something obvious, but is there a way to access the index/count of the iteration inside a hash each loop?

hash = {'three' => 'one', 'four' => 'two', 'one' => 'three'}
hash.each { |key, value| 
    # any way to know which iteration this is
    #   (without having to create a count variable)?
}

Upvotes: 134

Views: 80094

Answers (2)

YOU
YOU

Reputation: 123821

If you like to know Index of each iteration you could use .each_with_index

hash.each_with_index { |(key,value),index| ... }

Upvotes: 339

Kaleb Brasee
Kaleb Brasee

Reputation: 51935

You could iterate over the keys, and get the values out manually:

hash.keys.each_with_index do |key, index|
   value = hash[key]
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end

EDIT: per rampion's comment, I also just learned you can get both the key and value as a tuple if you iterate over hash:

hash.each_with_index do |(key, value), index|
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end

Upvotes: 15

Related Questions