web-dev-qa-db-fra.com

Possible d'accéder à l'index dans un hachage chaque boucle?

Il me manque probablement quelque chose d'évident, mais existe-t-il un moyen d'accéder à l'index/au compte de l'itération dans un hachage à chaque boucle?

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)?
}
116
Upgradingdave

Si vous aimez connaître l'index de chaque itération, vous pouvez utiliser .each_with_index

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

Vous pouvez parcourir les clés et extraire les valeurs manuellement:

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: par commentaire de rampion, je viens aussi d'apprendre que vous pouvez obtenir à la fois la clé et la valeur sous forme de tuple si vous parcourez 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
11
Kaleb Brasee