Scala: Comment convertir des éléments de tuple en listes
Supposons que j'ai une liste de tuples:
val tuples = listOfStrings.map(string => {
val split = string.split(":")
(split(0), split(1), split(2))
})
Je voudrais obtenir le split(0) dans une liste, split(1) dans une autre liste, et ainsi de suite.
Un moyen simple de ce qui pourrait être atteint par l'écriture:
list1 = tuples.map(x => x._1).toList
list2 = tuples.map(x => x._2).toList
list3 = tuples.map(x => x._3).toList
Est-il plus élégant (fonctionnelle) de manière à atteindre le plus haut, sans écrit 3 états distincts?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Cela vous donnera le résultat que d'une liste de liste:
Si vous souhaitez les stocker dans des variables locales, il suffit de faire:
Mise à JOUR: Comme indiqué par Blaisorblade, de la bibliothèque standard a en fait une méthode intégrée pour cela:
unzip3
ce qui est juste commeunzip
mais pour les triples au lieu de paires:Inutile de dire, vous devriez préférer cette méthode sur mon roulé à la main de la solution ci-dessus (mais pour les n-uplets d'arité > 3, ce serait encore s'appliquer).
Vous voulez décompresser:
Si vous voulez quelque chose qui peut être utilisé pour arbitraire tuple tailles:
De toute évidence, cela pourrait être exprimé de manière plus élégante si vous aviez une Liste de Tableaux à la place.
Vous pouvez simplement écrire les déclarations en une seule ligne.
Comme
Je ne sais pas élégant, mais vous pourrait le faire en une seule ligne sans l'étape intermédiaire de stocker les n-uplets. C'est peut-être un peu dur à lire...
repl exemple: