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

Scala 将元组列表转换为列表元组,scala,Scala,如何将元组列表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

如何将元组列表
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])

您需要
解压

scala> List((1,"a"), (3, "b"), (4, "d")).unzip
res1: (List[Int], List[String]) = (List(1, 3, 4),List(a, b, d))
类似地,对于
列表[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))

对于更高的算术数,您可以使用