{"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
{"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
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
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"
}
si necesita iterar a través de un mapa hash, que son tal vez usando el contenedor equivocado – Scoregraphic
@Scoregraphic - no necesariamente - esto no es tan raro. Ejemplo: serialización de datos. –
Espera, ¿tienes un hash con un par clave/valor único cuyo valor es una matriz de matrices? – haffax