为 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))
我想知道是否有人可以提供帮助。
我正在尝试根据 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))