Ich habe eine Tuple2
von List[List[String]]
und ich würde gerne in der Lage sein, das Tupel in eine Liste zu konvertieren, so dass ich dann List.transpose()
verwenden kann. Gibt es eine Möglichkeit, dies zu tun? Außerdem weiß ich, dass es ein Pair
ist, obwohl ich immer ein Fan von generischen Lösungen bin.Gibt es in Scala irgendwelche Methoden, um Tupel in Listen zu konvertieren?
33
A
Antwort
63
Funktioniert mit jedem Tupel (scala 2.8):
myTuple.productIterator.toList
Scala 2.7:
(0 to (myTuple.productArity-1)).map(myTuple.productElement(_)).toList
Nicht sicher, wie Typinformationen für eine allgemeine Produkt oder Tuple zu halten, sondern für Tuple2 :
def tuple2ToList[T](t: (T,T)): List[T] = List(t._1, t._2)
Sie könnten natürlich de feine ähnliche typsichere Konvertierungen für alle Tupel (bis 22).
4
Shapeless Verwendung -
@ import syntax.std.tuple._
import syntax.std.tuple._
@ (1,2,3).toList
res21: List[Int] = List(1, 2, 3)
@ (1,2,3,4,3,3,3,3,3,3,3).toList
res22: List[Int] = List(1, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3)
Beachten Sie, dass Typ-Informationen verwendet nicht verloren Shapeless des toList
.
Sieht gut aus, obwohl Sie 'myTuple.productArity - 1' und' productElement() 'benötigen, gibt' Any' zurück. Gibt es eine Möglichkeit, die Informationen zum inneren Typ beizubehalten? – pr1001
Die Indexierung wurde schrittweise korrigiert, und der Kommentar wurde in der Antwort beibehalten. –
Danke, sieht gut aus. – pr1001