213 votes

Comment itérer sur un hash en Ruby ?

J'ai un hachis comme ça :

{
 1=>["a", "b"], 
 2=>["c"], 
 3=>["a", "d", "f", "g"], 
 4=>["q"]
}

Comment puis-je l'itérer afin d'obtenir un résultat comme celui-ci :

1-----

a

b

2-----

c

3-----

a 

d

f

g

316voto

sepp2k Points 157757
hash.each do |key, array|
  puts "#{key}-----"
  puts array
end

En ce qui concerne l'ordre, je dois ajouter que dans la version 1.8, les éléments seront itérés dans un ordre aléatoire (en fait, dans un ordre défini par la fonction de hachage de Fixnum), tandis que dans la version 1.9, ils seront itérés dans l'ordre du littéral.

48voto

erik Points 3923
hash.keys.sort.each do |key|
  puts "#{key}-----"
  hash[key].each { |val| puts val }
end

18voto

glenn mcdonald Points 8933

L'appel de sort sur un hash le convertit en tableaux imbriqués et les trie ensuite par clé, donc tout ce dont vous avez besoin est ceci :

puts h.sort.map {|k,v| ["#{k}----"] + v}

Et si vous n'avez pas réellement besoin de la partie "----", elle peut être juste :

puts h.sort

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X