0

下面的代码假设对一个元组列表的值求和,但是当两个或多个元组包含相同的值时,元组只输出一次:

var data = List((1, "1") , (1, "one"))            //> data  : List[(Int, java.lang.String)] = List((1,1), (1,one))

        data = data.groupBy(_._2).map {
            case (label, vals) => (vals.map(_._1).sum, label)
        }.toList.sortBy(_._1).reverse

println(data)                                     //> List((1,1))

上面的输出是List((1,1))我期待的List((1,1) , (1,"one"))

是否需要调整 groupBy 函数参数来解决这个问题?

4

1 回答 1

3

实际上,它的行为确实符合预期。groupBy返回地图。当您map遍历地图时,您会构建一个新地图,当然,每个键都是唯一的。在这里,您将拥有1两次钥匙……</p>

然后,您应该在调用toList之前调用map,而不是之后调用。

于 2013-06-19T10:55:02.917 回答