Quiero obtener una salida específica iterando un Ruby Hash.
Este es el Hash sobre el que quiero repetir:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Este es el resultado que me gustaría obtener:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
En Ruby, ¿cómo puedo obtener esa salida con mi Hash?
Respuestas:
Con respecto al orden que debo agregar, que en 1.8 los elementos se iterarán en orden aleatorio (bueno, en realidad en un orden definido por la función hash de Fixnum), mientras que en 1.9 se repetirá en el orden del literal.
fuente
?
llave en lugar? Ej: ¿|?, array|
es esta sintaxis válida??
no es un nombre de variable válido en Ruby. Puedes usar_
, pero no es necesario .|_, v|
La forma más básica de iterar sobre un hash es la siguiente:
fuente
fuente
Llamar a sort en un hash lo convierte en matrices anidadas y luego las ordena por clave, por lo que todo lo que necesita es esto:
Y si realmente no necesita la parte "----", puede ser simplemente:
fuente
Mi solución de una línea:
hash.each { |key, array| puts "#{key}-----", array }
Creo que es bastante fácil de leer.
fuente
También puede refinar
Hash::each
para que sea compatible con la enumeración recursiva . Aquí está mi versión deHash::each
(Hash::each_pair
) con soporte de bloque y enumerador :Aquí hay ejemplos de uso
Hash::each
con y sinrecursive
bandera:Aquí hay un ejemplo de la pregunta en sí:
También eche un vistazo a mi versión recursiva de
Hash::merge
(Hash::merge!
) aquí .fuente