Scala将元组列表转换为列表元组

31

我如何将元组列表List[(A,B)]转换为列表元组(List[A], List[B])

我尝试了以下方法,但感觉很粗糙,希望有更好的方法。

  val flat: List[AnyRef] = aAndB.map{ x =>
    x.map(y => List(y._1, y._2))
  }.flatMap(x => x)

  val typeA: List[A] = flat.filter {
    case x: A => true
    case _ => false
  }.map(_.asInstanceOf[A])     

  val typeB: List[B] = flat.filter {
    case x: B => true
    case _ => false
  }.map(_.asInstanceOf[B])
1个回答

63

你想要 解压缩

scala> List((1,"a"), (3, "b"), (4, "d")).unzip
res1: (List[Int], List[String]) = (List(1, 3, 4),List(a, b, d))

同样地,对于类型为List[Tuple3[A, B, C]]的数据,存在一个名为unzip3的函数可用,但如果你需要更高数量的元组解包功能,则需要自己实现。

scala> List((1,"a", true), (3, "b", false), (4, "d", true)).unzip3
res2: (List[Int], List[String], List[Boolean]) = (List(1, 3, 4),List(a, b, d),List(true, false, true))

1
对于更高的元数,您可以使用product-collections - Mark Lister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接