Scala groupby元组

时间:2017-01-25 20:27:33

标签: scala

我有一个Seq [((元组A),(元组B))]

有没有一种简单的方法来组合元组A所以我得到了Seq [(元组A,Seq [元组B])]

I.ve尝试了groupby(x => x.TupleA),但它抛出了一个Mapping Exception:不知道如何序列化元组的键。

1 个答案:

答案 0 :(得分:4)

我认为这很有效。使用groupBy(_._1)按元组的第一个元素对序列进行分组,并在列表中收集元组的第二个元素:

val s = Seq(((1,2,3), (4,5,6)), ((1,2,3), (5,6,7)), ((2,3,4), (4,5,6)))

s.groupBy(_._1).mapValues(_.map(_._2))
// res1: scala.collection.immutable.Map[(Int, Int, Int),Seq[(Int, Int, Int)]] = 
//          Map((1,2,3) -> List((4,5,6), (5,6,7)), (2,3,4) -> List((4,5,6)))

如果您希望结果是列表而不是Map,请使用toList转换:

s.groupBy(_._1).mapValues(_.map(_._2)).toList

给出:

// List(((1,2,3),List((4,5,6), (5,6,7))), ((2,3,4),List((4,5,6))))