【问题标题】:Scala groupby TuplesScala groupby 元组
【发布时间】:2017-01-26 05:02:54
【问题描述】:

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

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

我试过 groupby(x => x.TupleA) 但它抛出一个映射异常:不知道如何序列化元组的键。

【问题讨论】:

  • 你能举一个你的 Seq 的例子吗?
  • [((1,2,3)(4,5,6)), ((1,2,3)(5,6,7)), ((2,3,4 )(4,5,6))]
  • 我想要 [((1,2,3),[(4,5,6),(5,6,7)]), ((2,3,4),[( 4,5,6)])]

标签: scala


【解决方案1】:

我认为这行得通。使用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))))

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 2015-06-12
    • 2018-11-14
    • 1970-01-01
    • 2021-12-03
    • 2023-02-03
    相关资源
    最近更新 更多