2014-03-04 84 views
0

我有元組的兩份名單Scala-如何使用加入運營商與tuple'2和tuple'3

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 } 

它會之間不匹配更容易使用地圖,但在Tuple'3中,我們不能在這種情況下使用地圖。

如何使用連接運算符來加入元組?

預期結果:以這種方式連接元組以便稍後執行操作。

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

你期望什麼結果? – serejja

+0

我更新了我的問題 – user3378649

+0

@ user3378649我還是不瞭解你的問題。你想合併兩個列表嗎? – Jatin

回答

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)) 
+0

這是工作!但我正在學習視頻課程來學習Scala。我需要使用Join運算符。 – user3378649

0

從構建地圖的序列[Tuple3]:

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

這可能會解決問題了嗎?