2010-08-16 11 views
7
{"Journal"=>[[4, -785.0], 
      [13, -21.9165000915527], 
      [14, -213.008995056152], 
      [15, -50.074499130249]]} 

¿Cómo se puede iterar este hash en Ruby, y cómo separar las claves & valores?iteración de la colección hash

+0

si necesita iterar a través de un mapa hash, que son tal vez usando el contenedor equivocado – Scoregraphic

+0

@Scoregraphic - no necesariamente - esto no es tan raro. Ejemplo: serialización de datos. –

+0

Espera, ¿tienes un hash con un par clave/valor único cuyo valor es una matriz de matrices? – haffax

Respuesta

14
myHash.each do |key, value| 
    // key holds the key, value holds the value 
end 

En caso de querer transformar las matrices dentro de su matriz a un mapa ello:

myNewHash = {} 
myArrayOfArrays = myHash["Journal"] 
myArrayOfArrays.each do | item | 
    myNewHash[item[0]] = item[1] 
end 
21

Ruby tiene una interfaz de iteración uniforme. Todas las colecciones en Ruby tienen un método llamado each, que le permite iterar sobre cada elemento de la colección. Tenga en cuenta, sin embargo, que la iteración explícita es un olor a código. Debería utilizar sobre todo iteradores de nivel superior como map, reduce, select, find, reject y tal.

En este caso particular en que la colección es una Hash, cada elemento que se está cedió a su bloque, es una serie de dos elementos que consiste en la clave y el valor:

print hsh.reduce('') {|s, el| 
    s << "The key is #{el.first} and the value is #{el.last}.\n" 
} 

Gracias a la desestructuración de Ruby se unen, se puede simplemente enlazar los dos elementos de la matriz de dos variables en su bloque y no tendrá la necesidad de tomar constantemente la matriz aparte:

print hsh.reduce('') {|s, (k, v)| 
    s << "The key is #{k} and the value is #{v}.\n" 
} 
Cuestiones relacionadas