0

我有一个名称逗号分隔的名称值对列表,其中一些重复:

10, test1
11, test2
12, test3
13, test1
14, test2

我想总结重复的值(按降序排列),因此上面的列表变为:

25, test2
23, test1
12, test3

在 java 中,我将创建一个新列表并遍历现有列表。列表中的每个元素都将与其他所有元素进行比较,如果任何名称匹配,则将值相加,一旦到达列表末尾,则将这个新元素添加到新列表中。如果没有元素匹配(该元素是唯一的),则将该元素与其值相加。完成后,我将使用某种比较器对列表进行排序。

在 Scala 中是否有更实用的方法来实现这一点,可以使用 filter 方法吗?

4

2 回答 2

4

假设您已经以如下方式解析了 CSV:

val data = List((10, "test1"), (11, "test1"), ...)

您现在可以执行以下操作:

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

这一切。

于 2013-06-14T20:47:42.687 回答
1

您可以先使用 agroupBy将值收集到地图中,然后使用mapValues来计算您需要的答案,在此示例中为 sum。

另请注意,这里的团队名称是关键,总和是价值,但这并不重要 (?) 。

于 2013-06-14T20:47:14.887 回答