为 Scala 列表中的唯一标记值聚合数据

aggregate data for uniquely tagged values in a list in scala

我想知道是否有人可以提供帮助。

我正在尝试根据 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 值和正常值。

任何帮助或指点将不胜感激

首先,您不能以这种方式对键值对进行分组。在 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))