ho un hash, che ha la forma {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}
Conversione Rubino hash agli array
Come posso convertire al modulo {:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]}
ho un hash, che ha la forma {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}
Conversione Rubino hash agli array
Come posso convertire al modulo {:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]}
Se si desidera modificare l'hash originale si può fare:
hash.each_pair { |key, value| hash[key] = value.to_a }
Dalla documentazione per Hash#to_a
Converte hsh in una matrice nidificata di matrici [ chiave, valore].
h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300 }
h.to_a #=> [["c", 300], ["a", 100], ["d", 400]]
Grazie @mikej. Ha funzionato come un incantesimo, anche se mi piacerebbe sapere qual è la differenza tra hash.each e hash.each_pair? –
Se non si desidera modificare l'hash originale, è possibile utilizzare questo: 'new_hash = hash.inject ({}) {| h, (chiave, valore) | h [chiave] = valore.to_a; h} ' –
@Aditya: se vuoi che il tuo blocco abbia due parametri, usa' each_pair'. Se solo per la leggibilità. –
hash.collect {|a, b| [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}
Ecco un altro modo per farlo:
hsh = {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}
hsh.each{|k,v| hsh[k]=*v}
# => {:a=>[["aa", 11], ["ab", 12]], :b=>[["ba", 21], ["bb", 22]]}
Se si lavora con gli hash multi-livello e si desidera per appiattirli controllare la mia gemma HashModel: https://rubygems.org/gems/hashmodel e puoi ottenere il sorgente su github: https://github.com/mi kbe/hashmodel –