Scala按列表列表分组并减去分组值

时间:2014-12-29 12:35:10

标签: scala

以下示例数据

val combineList = List(("A",12),("B",11),("C",12),("D",14),("E",23),("F",12),("D",53),("C",23),("B",12),("A",22),("E",21),("F",12),("C",21),("B",34),("A",34),("G",67),("D",23),("E",21),("F",12),("D",31),("B",41),("E",14),("F",15),("G",18),("A",11),("C",10),("D",9),("A",13),("E",1),("F",14))

val X = 98

现在想要最终输出如下,

第一组按以下所有值

val groupKey = List(Map("A"->List(12,22,34,11,13)),Map("B"->List(11,12,34,41)),Map("C"->List(12,23,21,10)),Map("D"->List(14,53,23,31,9)),
Map("E"->List(23,21,21,14,1)),Map("F"->List(12,12,12,15,14)),Map("G"->List(67,18)))

X中的第二个减去groupKey这里的列表值X总是比列表值​​更亮,所以第二个输出将是

 val substrackValues =  List(Map("A"->List(86,76,34,87,85)),Map("B"->List(87,86,34,57)),Map("C"->List(86,75,77,88)),Map("D"->List(84,45,75,31,89)),
Map("E"->List(75,77,77,84,97)),Map("F"->List(86,86,86,15,84)),Map("G"->List(31,80)))

1 个答案:

答案 0 :(得分:3)

考虑

combineList.groupBy(_._1).mapValues(xs => xs.map(v => X-v._2))

提供

Map(E -> List(75, 77, 77, 84, 97), F -> List(86, 86, 86, 83, 84), A -> List(86, 76, 64, 87, 85), G -> List(31, 80), B -> List(87, 86, 64, 57), C -> List(86, 75, 77, 88), D -> List(84, 45, 75, 67, 89))

请注意,上面groupKey中的嵌入式地图是 singleton 地图,可以使用[(String,List[Int])]的元组表示,甚至可以更好地聚合到一个地图中。

在第一个元组元素分组后的解决方案中,我们将每个列表中的每个元素转换为X的值。

相关问题