Il me manque probablement quelque chose d'évident, mais existe-t-il un moyen d'accéder à l'index / au nombre de l'itération dans un hachage de 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)?
}
ruby
enumerable
Mise à niveaudave
la source
la source
Réponses:
Si vous souhaitez connaître l'index de chaque itération, vous pouvez utiliser
.each_with_index
la source
hash.each_with_index { |(key,value),index| ... }
hash.each
donne chaque paire clé-valeur dans unArray
. Les parenthèses font la même chose que(key,value) = arr
, en mettant la première valeur (la clé) danskey
et la seconde dansvalue
.each_with_index
liste dans le RDoc pour Hash: ruby-doc.org/core/classes/Hash.html . Maintenant, je vois que c'est un membre d'Enumerable. Mais dommage que RDoc ne puisse pas croiser les référenceseach_with_index
de Hash.html.irb
, et je m'en sersClassName#instance_methods
pour m'assurer que je n'ai rien manqué.ClassName#instance_methods
a été très utileVous pouvez parcourir les clés et extraire les valeurs manuellement:
EDIT: par commentaire de rampion, je viens également d'apprendre que vous pouvez obtenir à la fois la clé et la valeur sous forme de tuple si vous itérez sur
hash
:la source
key
dans la première boucle se trouve un tableau de paire clé + valeur, donc l'utiliser comme un indexhash
est faux. L'avez-vous déjà testé?