Provavelmente estou perdendo algo óbvio, mas existe uma maneira de acessar o índice / contagem da iteração dentro de um hash em cada 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)?
}
ruby
enumerable
Atualização
fonte
fonte
Respostas:
Se você gostaria de conhecer o Índice de cada iteração, poderia usar
.each_with_index
fonte
hash.each_with_index { |(key,value),index| ... }
hash.each
fornece cada par de valor-chave em umArray
. Os parênteses fazem a mesma coisa que(key,value) = arr
, colocando o primeiro valor (a chave) emkey
e o segundo emvalue
.each_with_index
listado no RDoc para Hash: ruby-doc.org/core/classes/Hash.html . Agora vejo que é um membro do Enumerable. Pena que o RDoc não possa cruzar a referênciaeach_with_index
do Hash.html.irb
e usoClassName#instance_methods
para garantir que não perca nada.ClassName#instance_methods
tem sido muito útilVocê pode iterar sobre as chaves e obter os valores manualmente:
EDIT: por comentário de rampion, também aprendi que você pode obter a chave e o valor como uma tupla se você iterar sobre
hash
:fonte
key
no primeiro loop há uma matriz de pares de chave + valor, portanto, usá-lo como um índicehash
está errado. Você já testou?