我想知道是否有人可以提供帮助。
我正在尝试根据id值聚合列表中的一些数据,我有一个listBuffer,它是从foreach函数更新的。我的输出意味着我有一个id号和一个值,因为foreach经常多次对每个id应用一个函数,我最终得到的列表如下所示:
ListBuffer(3106;0, 3106;3, 3108;2, 3108;0, 3110;1, 3110;2, 3113;0, 3113;2, 3113;0)
我想要做的是应用一个简单的函数来聚合这些数据,所以我留下了
List(3106;3 ,3108;2, 3110;3, 3113;2)
我认为可以使用foldLeft或groupBy来完成,但是我不知道如何让它识别id值和正常值。
非常感谢任何帮助或指示
答案 0 :(得分:0)
首先,您不能以这种方式对键值对进行分组。在scala中,你有一些写成
的元组 val pair: (Int, Int) = (3106,3)
,其中
pair._1 == 3106
pair._2 == 3
是真实的陈述。
所以你有:
val l = ListBuffer((3106,0), (3106,3), (3108,2), (3108,0), (3110,1), (3110,2), (3113,0), (3113,2), (3113,0))
val result = l.groupBy(x => x._1).map(x => (x._1, x._2.map(_._2))).map(x => (x._1, x._2.sum)).toList
println(result)
会给你
List((3106,3), (3108,2), (3110,3), (3113,2))