现在有两个元组。
1st tuple:((A,1),(B,3),(D,5)......)
2nd tuple:((A,3),(B,1),(E,6)......)
功能是将这两个元组合并到此。
((A,1,3),(B,3,1),(D,5,0),(E,0,6)......)
如果第一个元组包含不在第二个元组中的键,则将该值设置为0,反之亦然。如何在Scala中编写此函数的代码?
答案 0 :(得分:0)
假设您输入的格式为
val tuple1: List[(String, Int)] = List(("A",1),("B",3),("D",5),("E",0))
val tuple2: List[(String, Int)] = List(("A",3),("B",1),("D",6))
您可以将合并功能编写为
def merge(tuple1: List[(String, Int)],tuple2: List[(String, Int)]) =
{
val map1 = tuple1.toMap
val map2 = tuple2.toMap
map1.map{ case (k,v) =>
(k,v,map2.get(k).getOrElse(0))
}
}
调用函数
merge(tuple1,tuple2)
您将得到的输出为
res0: scala.collection.immutable.Iterable[(String, Int, Int)] = List((A,1,3), (B,3,1), (D,5,6), (E,0,0))
请让我知道是否能回答您的问题。
答案 1 :(得分:0)
val t1= List(("A",1),("B",3),("D",5),("E",0))
val t2= List(("A",3),("B",1),("D",6),("H",5))
val t3 = t2.filter{ case (k,v) => !t1.exists(case (k1,_) => k1==k)) }.map{case (k,_) => (k,0)}
val t4 = t1.filter{ case (k,v) => !t2.exists{case (k1,_) => k1==k} }.map{case (k,_) => (k,0)}
val t5=(t1 ++ t3).sortBy{case (k,v) => k}
val t6=(t2 ++ t4).sortBy{case (k,v) => k}
t5.zip(t6).map{case ((k,v1),(_,v2)) => (k,v1,v2) }
res: List[(String, Int, Int)] = List(("A", 1, 3), ("B", 3, 1), ("D", 5, 6), ("E", 0, 0), ("H", 0, 5))
就这里发生的事情而言 t3和t4-分别在t1和t2中找到缺失值,并将它们添加为零值 t5和t6对统一列表进行排序(t1和t3以及t2和t4)。最后,将它们压缩在一起并转换为所需的输出