我有两个元组列表
val firstT= List((S,1), (t,2), (H,2), (B,2), (D,1))
val secT= List((1,S,1), (1,t,1), (1,H,1), (1,B,1), (2,t,1), (2,H,1), (2,D,1), (2,B,2))
我必须加入元组以匹配
val res= secT.join(firstT).where { secT._2 } isEqualTo { firstT._1 }
使用map会更容易,但在Tuple'3中,我们不能在这种情况下使用地图。
如何使用join运算符加入元组?
预期结果:以这种方式加入元组以便稍后进行操作。
Join ( (1,S,1), (S,1) ) { return (1,S,1+1) }
Join ( (t,2),(1,t,1)) { return (1,t,2+1)}
Join ( (H,2), (1,H,1)) { ...}
等
我可以处理其余部分,但我想了解如何加入工作?
答案 0 :(得分:0)
蛮力的一个:
scala> SecT.collect{
case (a,x,c) if(firstT.filter(y => y._1 == x).headOption != None) =>
(a,x,c+firstT.filter(y => y._1 == x).head._2)}
res12: List[(Int, Symbol, Int)] = List((1,'S,2), (1,'t,3), (1,'H,3), (1,'B,3), (2,'t,3), (2,'H,3), (2,'D,2), (2,'B,4))
答案 1 :(得分:0)
从Seq [Tuple3]构建一个Map:
val lookupMap= secT.map(x=>(x._2,x)).toMap
lookupMap: scala.collection.immutable.Map[String,(Int, String, Int)] = Map(t -> (2,t,1), B -> (2,B,2), H -> (2,H,1), D -> (2,D,1), S -> (1,S,1))
哪可能解决您的问题?