Rubino Hash di trasposizione
Domanda
Ho il seguente hash ruby:
h = { i1: { q1: 1, q2:2 }, i2: { q1: 3, q2: 4} }
e voglio recepirla nel seguente modo:
{ q1: { i1: 1, i2: 3 }, q2: { i1: 2, i2: 4 } }
Ora, mi si avvicinò con una funzione che fa quello che voglio, ma mi chiedo se c'è un / modo elegante più sintetica per la stessa cosa?
La mia soluzione:
ht = Hash.new{ |h,k| h[k] = {} }
h.each_pair do |k,ih|
ih.each_pair{ |ik, iv| ht[ik][k] = iv }
end
Soluzione
Se si preferisce inject
, è possibile scrivere come
h.inject({}){|a,(k,v)|
v.inject(a){|a1,(k1,v1)|
a1[k1] ||= {}
a1[k1][k] = v1
a1
}
a
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow