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
Вы хотите unzip
scala> List((1,"a"), (3, "b"), (4, "d")).unzip
res1: (List[Int], List[String]) = (List(1, 3, 4),List(a, b, d))
Точно так же есть unzip3
для List[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))