Scala-如何使用tuple'2和tuple'3加入运算符

时间:2014-03-04 10:46:59

标签: scala

我有两个元组列表

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)) { ...}

我可以处理其余部分,但我想了解如何加入工作?

2 个答案:

答案 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))

哪可能解决您的问题?