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

时间:2014-12-15 15:23:30

标签: 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 _ => false
  }.map(_.asInstanceOf[A])     

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

1 个答案:

答案 0 :(得分:38)

您想要unzip

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

类似地,unzip3List[Tuple3[A, B, C]],通过更高级别的任何事情你都必须自己实施。

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))