Je veux obtenir une sortie spécifique en itérant un hachage Ruby.
Voici le Hash sur lequel je veux répéter:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Voici la sortie que j'aimerais obtenir:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
Dans Ruby, comment puis-je obtenir une telle sortie avec mon Hash?
Réponses:
En ce qui concerne l'ordre, je dois ajouter qu'en 1.8, les éléments seront itérés dans un ordre aléatoire (enfin, en fait dans un ordre défini par la fonction de hachage de Fixnum), tandis qu'en 1.9, il sera itéré dans l'ordre du littéral.
la source
?
clé à la place? ex:|?, array|
cette syntaxe est-elle valide??
n'est pas un nom de variable valide dans Ruby. Vous pouvez l'utiliser_
, mais vous n'en avez pas besoin .|_, v|
La façon la plus élémentaire d'itérer sur un hachage est la suivante:
la source
la source
L'appel de tri sur un hachage le convertit en tableaux imbriqués, puis les trie par clé, donc tout ce dont vous avez besoin est le suivant:
Et si vous n'avez pas réellement besoin de la partie "----", cela peut être juste:
la source
Ma solution monoligne:
hash.each { |key, array| puts "#{key}-----", array }
Je pense que c'est assez facile à lire.
la source
Vous pouvez également affiner
Hash::each
afin qu'il prenne en charge l' énumération récursive . Voici ma version deHash::each
(Hash::each_pair
) avec prise en charge des blocs et des énumérateurs :Voici utilisation des exemples de
Hash::each
avec et sansrecursive
drapeau:Voici un exemple de la question elle-même:
Jetez également un œil à ma version récursive de
Hash::merge
(Hash::merge!
) ici .la source