加入两个包含共同元素的列表 - Scala

时间:2016-06-08 15:41:13

标签: list scala join

我有2个列表,如下所述:

val L1 = List [(Int,Int,String)]

val L2 = List [(Int,Int,String)]

我希望在第一个和第二个Int元素的基础上加入这两个列表,结果列表必须有4个元素(Int,Int,String,String)。

val joinedList = List [(Int,Int,String,String)]

其中最后2个String元素将是L1的字符串和L2的字符串。

前: -

val L1 = List((1,1,“one”),(2,2,“two”))

val L2 = List((2,2,“两次”),(3,3,“三次”))

输出列表 - >

val joinedList = List((1,1,“one”,“ - ”),(2,2,“two”,“two”),(3,3,“ - ”,“triice” ))

请建议一种在scala中实现这一目标的方法。

1 个答案:

答案 0 :(得分:3)

首先,您希望将其设置为Maps,以便查找起来更容易,然后您只需map覆盖所有密钥:

val L1Map = L1.map{case (x,y,z) => ((x,y) -> z)}.toMap
val L2Map = L2.map{case (x,y,z) => ((x,y) -> z)}.toMap
val allKeys = L1Map.keySet ++ L2Map.keySet

val result = allKeys map {case (x,y) =>
  (x, y, L1Map.getOrElse((x,y), "--"), L2Map.getOrElse((x,y), "--"))
}

结果,这会为您提供未分类的Set。如果您需要List,则可以将其转换回来并根据需要进行排序。