Scala - 将元组映射到地图地图?

时间:2015-08-12 02:06:28

标签: list scala dictionary

我有一个元组列表:

val t = List( (1,2,1.0), (1,3,2.0), (1,2,1.1) )

我想创建一个以t._1为关键字的地图,以及以t._2为关键字且以t._3为总和的地图的值。

val m = Map( (1-> Map((2 -> 2.1), (3 -> 2.0)) )

我如何在Scala中执行此操作?

我想用纯Scala而不是库来实现这个目标,但是如果scalaz等库(我完全主观认为)是一个更好看的解决方案,我也会接受这个答案。 / p>

2 个答案:

答案 0 :(得分:6)

如果你是一个单行,那么你可能会喜欢这个:

val t = List( (1,2,1.0), (1,3,2.0), (1,2,1.1) )
t.groupBy(_._1).mapValues(_.groupBy(_._2).mapValues(_.map(_._3).sum))

结果是:

Map(1 -> Map(2 -> 2.1, 3 -> 2.0))

答案 1 :(得分:2)

这是一种方式:

t.groupBy(_._1).map {
    case (outerKey, outerList) =>
        outerKey -> outerList.groupBy(_._2).map {
            case (innerKey, innerList) =>
                innerKey -> innerList.map(_._3).sum
        }
}

的产率:

Map(1 -> Map(2 -> 2.1, 3 -> 2.0))