設的第一個元素合併列表說我有一個列表:斯卡拉:如何由元組
[(A, a), (A, b), (A, c), (B, a), (B, d)]
如何作出這樣的名單爲:
[(A, [a,b,c]), (B, [a,d])]
與單一功能?
感謝
設的第一個元素合併列表說我有一個列表:斯卡拉:如何由元組
[(A, a), (A, b), (A, c), (B, a), (B, d)]
如何作出這樣的名單爲:
[(A, [a,b,c]), (B, [a,d])]
與單一功能?
感謝
的groupBy功能可以實現這一點:
scala> val list = List((1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'd'))
list: List[(Int, Char)] = List((1,a), (1,b), (1,c), (2,a), (2,d))
scala> list.groupBy(_._1) // grouping by the first item in the tuple
res0: scala.collection.immutable.Map[Int,List[(Int, Char)]] = Map(2 -> List((2,a), (2,d)), 1 -> List((1,a), (1,b), (1,c)))
好的,謝謝,這給了我一個暗示。 groupByKey是答案 – NormalGuy
只是做GROUPBY不會給你你想要的預期格式。所以我建議你爲此寫一個自定義方法。
def groupTuples[A,B](seq: Seq[(A,B)]): List[(A, List[B])] = {
seq.
groupBy(_._1).
mapValues(_.map(_._2).toList).toList
}
然後調用它以獲得所需的結果。
val t = Seq((1,"I"),(1,"AM"),(1, "Koby"),(2,"UP"),(2,"UP"),(2,"AND"),(2,"AWAY"))
groupTuples[Int, String](t)
缺少最後一步。這會返回一個'Map'。 OP請求一個'List'。 – jwvh
謝謝。更新了返回類型。 –
只是使用groupBy – nmat
你是什麼意思的「單一功能」?使用'groupBy'會啓動你,但沒有一個標準庫方法可以完成這個完整的轉換。 – jwvh
可能重複[如何合併兩個元組列表?](http://stackoverflow.com/questions/13074031/how-to-merge-two-lists-of-tuples) – jwvh