{"Journal"=>[[4, -785.0],
[13, -21.9165000915527],
[14, -213.008995056152],
[15, -50.074499130249]]}
Come si può iterare questo hash in Ruby e come si desidera separare i valori delle chiavi &?iterazione raccolta hash
{"Journal"=>[[4, -785.0],
[13, -21.9165000915527],
[14, -213.008995056152],
[15, -50.074499130249]]}
Come si può iterare questo hash in Ruby e come si desidera separare i valori delle chiavi &?iterazione raccolta hash
myHash.each do |key, value|
// key holds the key, value holds the value
end
Nel caso in cui si desidera trasformare l'array all'interno dell'array a una mappa fare questo:
myNewHash = {}
myArrayOfArrays = myHash["Journal"]
myArrayOfArrays.each do | item |
myNewHash[item[0]] = item[1]
end
Ruby ha un'interfaccia di iterazione uniforme. Tutte le raccolte in Ruby hanno un metodo chiamato each
, che consente di scorrere su ogni elemento della raccolta. Si noti, tuttavia, che l'iterazione esplicita è un odore di codice. Dovresti utilizzare principalmente iteratori di livello superiore come map
, reduce
, select
, find
, reject
e così via.
In questo caso particolare in cui la raccolta è un Hash
, ciascun elemento che viene ceduto al blocco, è un array di due elementi che costituiscono la chiave e il valore:
print hsh.reduce('') {|s, el|
s << "The key is #{el.first} and the value is #{el.last}.\n"
}
Grazie alla destrutturazione di rubino si legano, si può semplicemente legare i due elementi della matrice a due variabili nel blocco e non avrà la necessità di tenere costantemente la matrice a parte:
print hsh.reduce('') {|s, (k, v)|
s << "The key is #{k} and the value is #{v}.\n"
}
se avete bisogno di scorrere un HashMap, si sono forse usando il contenitore sbagliato – Scoregraphic
@Scoregraphic - non necessariamente - questo non è poi così raro. Esempio: serializzazione dei dati. –
Aspetta, hai un hash con una singola coppia chiave/valore il cui valore è una matrice di matrici? – haffax