如何合并两个元组列表?

Sha*_*kti 9 merge scala list

我在Scala中有两个列表,如何合并它们以便将元组组合在一起?

是否有现成的Scala列表API可以执行此操作或需要我自己执行此操作?

输入:

 List((a,4), (b,1), (c,1), (d,1))
 List((a,1), (b,1), (c,1))
Run Code Online (Sandbox Code Playgroud)

预期产量:

List((a,5),(b,2),(c,2),(d,1))
Run Code Online (Sandbox Code Playgroud)

par*_*tic 19

您可以尝试以下一行:

scala> ( l1 ++ l2 ).groupBy( _._1 ).map( kv => (kv._1, kv._2.map( _._2).sum ) ).toList
res6: List[(Symbol, Int)] = List(('a,5), ('c,2), ('b,2), ('d,1))
Run Code Online (Sandbox Code Playgroud)

在哪里l1l2你想要合并的元组的列表.

现在,细分:

  • (l1 ++ l2) 你只是连接两个列表
  • .groupBy( _._1)你按照他们的第一个元素对所有元组进行分组.您将收到一个Map,第一个元素作为键,以及以此元素作为值开头的元组列表.
  • .map( kv => (kv._1, kv._2.map( _._2).sum ) ) 您使用类似的键创建一个新地图,但值是所有第二个元素的总和.
  • .toList 您将结果转换回列表.

或者,您可以使用模式匹配来访问元组元素.

( l1 ++ l2 ).groupBy( _._1 ).map{
  case (key,tuples) => (key, tuples.map( _._2).sum ) 
}.toList
Run Code Online (Sandbox Code Playgroud)