假设我有一个tuple3 List [(A,B,C)]的列表。将它转换为多图的最佳方法是什么,它映射Map [A,Map [B,List [C]]]?
我知道如何使用Tuple2,但如何使用Tuple3
答案 0 :(得分:3)
我唯一的建议是使用.mapValues(_.
代替.map(x => x._1 -> x._2.
:
list.groupBy(_._1).mapValues(_.groupBy(_._2).mapValues(_.map(_._3)))
答案 1 :(得分:1)
不短,但可能更清楚:
一些测试数据:
val x = List(('a', 1, 2.0), ('a', 2, 3.0), ('a', 1, 6.0), ('b', 3, 4.0), ('c', 4, 5.0))
定义一个函数,从元组创建一个映射,为每个键创建值列表:
def makeMergedMap[A,B](xs:List[(A, B)]) = xs.groupBy(_._1).mapValues(_.map(_._2))
重新映射输入元组以生成对
val y=x.map(e=>(e._1, (e._2, e._3)))
// List((a,(1,2.0)), (a,(2,3.0)), (a,(1,6.0)), (b,(3,4.0)), (c,(4,5.0)))
现在合并映射外部元组,然后合并映射结果中的每个值。
makeMergedMap(y).mapValues(makeMergedMap(_))
// Map(b -> Map(3 -> List(4.0)),
// a -> Map(2 -> List(3.0), 1 -> List(2.0, 6.0)),
// c -> Map(4 -> List(5.0)))
答案 2 :(得分:0)
好的,我设法用
做到了list.groupBy(_._1).map(x => x._1 -> x._2.groupBy(_._2).mapValues(_.map(_._3)))
如果你的答案较短,那么欢迎你