Eu quero obter uma saída específica iterando um Ruby Hash.
Este é o Hash sobre o qual quero iterar:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Esta é a saída que eu gostaria de obter:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
Em Ruby, como posso obter uma saída desse tipo com meu Hash?
Respostas:
Em relação à ordem, devo acrescentar que em 1,8 os itens serão iterados em ordem aleatória (bem, na verdade, em uma ordem definida pela função de hash de Fixnum), enquanto em 1,9 serão iterados na ordem do literal.
fonte
?
lugar de chave? ex:|?, array|
essa sintaxe é válida??
não é um nome de variável válido no Ruby. Você pode usar_
, mas não precisa .|_, v|
A maneira mais básica de iterar sobre um hash é a seguinte:
fonte
fonte
A classificação de chamada em um hash converte-a em matrizes aninhadas e as classifica por chave, então tudo que você precisa é o seguinte:
E se você realmente não precisa da parte "----", pode ser apenas:
fonte
Minha solução de uma linha:
hash.each { |key, array| puts "#{key}-----", array }
Eu acho que é bem fácil de ler.
fonte
Você também pode refinar
Hash::each
para oferecer suporte à enumeração recursiva . Aqui está minha versão doHash::each
(Hash::each_pair
) com bloco suporte a e enumerador :Aqui estão exemplos de uso de
Hash::each
com e semrecursive
sinalizador:Aqui está um exemplo da própria pergunta:
Também dê uma olhada na minha versão recursiva de
Hash::merge
(Hash::merge!
) aqui .fonte