necesito una manera más concisa para transformar una secuencia de tuplas en un mapa de mapas de mapas ... Como una firma que se interponen en caso de Tuple4
:4-tupla secuencia Para Mapa de Mapas Mapas de
def tuple4Seq2MapOfMaps[A,B,C,D](seq: Seq[(A,B,C,D)]): Map[A,Map[B,Map[C,D]]]
el siguiente código muestra mi reciente código fea, me stucked con (tipo A
-D
arbitraria):
type A = Int
type B = Double
type C = String
type D = Boolean
val tupleSeq = Seq[(A,B,C,D)](
(1,1.0D,"a",true),
(1,1.0D,"b",true),
(1,1.0D,"c",false)
)
val x = tupleSeq.groupBy{ _._1 }.map{ case (k,s) => (k,s.map{ x => (x._2,x._3,x._4) }) }
val y = x.map{ case (k,s) => (k,s.groupBy{_._1}.map{ case (k,s) => (k,s.map{ x => (x._2,x._3) }) }) }
val z = y.map{ case (k1,m) => (k1,m.map{ case (k2,s1) => (k2,s1.groupBy{_._1}.map{ case (k3,s2) => (k3,s2.map{ _._2 }.head) }) }) }
val m = z(1)(1.0D)
println(m("b"))
Nota el uso de head
en val z
.
Sería bueno tener una forma más concisa para solo Tuple4
, pero además es interesante como generalizar esto a TupleN
(N> = 2).
¿Hay algún enfoque agradable en la mente de alguien por ahí?
¡Gracias!
Muy buena solución! ¡Gracias! –
Como complemento: se debe tener en cuenta que 'mapValues' devuelve una vista. Vea la buena respuesta de Rex Kerr aquí: http://stackoverflow.com/questions/5433578/subsetof-versus-forall-contains –