90 votes

En Scala, comment supprimer les doublons d'une liste ?

Supposons que j'ai

val dirty = List("a", "b", "a", "c")

Existe-t-il une opération de liste qui renvoie "a", "b", "c" ?

170voto

Kipton Barros Points 12445

Jetez un coup d'œil à la ScalaDoc pour Seq ,

scala> dirty.distinct
res0: List[java.lang.String] = List(a, b, c)

Mise à jour . D'autres ont suggéré d'utiliser Set plutôt que List . C'est très bien, mais sachez que par défaut, la fonction Set ne préserve pas l'ordre des éléments. Vous pouvez vouloir utiliser une implémentation de Set qui explicitement fait préserver l'ordre, comme collection.mutable.LinkedHashSet .

17voto

crockpotveggies Points 3797

scala.collection.immutable.List a maintenant un .distinct méthode.

Donc, appeler dirty.distinct est désormais possible sans avoir à se convertir en un Set o Seq .

15voto

paradigmatic Points 20871

Avant d'utiliser la solution de Kitpon, pensez à utiliser une Set plutôt qu'un List il garantit que chaque élément est unique.

Comme la plupart des opérations de liste ( foreach , map , filter ...) sont les mêmes pour les ensembles et les listes, changer de collection pourrait être très facile dans le code.

7voto

zentrope Points 61

Utiliser Set en premier lieu est la bonne façon de faire, bien sûr, mais :

scala> List("a", "b", "a", "c").toSet.toList
res1: List[java.lang.String] = List(a, b, c)

Travaux. Ou juste toSet car il soutient le Seq Traversable interface.

-1voto

Sumit Pal Points 11

InArr.distinct foreach println _

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X