Comment supprimer les doublons d'un Array<String?>
in kotlin?
Réponses:
Utilisez la distinct
fonction d'extension :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
Il existe également une distinctBy
fonction qui permet de spécifier comment distinguer les éléments:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Comme @ mfulton26 suggéré, vous pouvez également utiliser toSet
, toMutableSet
et, si vous n'avez pas besoin de l'ordre d' origine à conserver, toHashSet
. Ces fonctions produisent un Set
au lieu de a List
et devraient être un peu plus efficaces que distinct
.
Vous pouvez trouver utile:
toSet
ou toMutableSet
qui ont moins de frais généraux que distinct
et si la commande n'a pas d'importance, vous pouvez utiliser toHashSet
.
to*Set
est plus efficace (espace et temps) que distinct[By]
parce qu'il renvoie Set
directement au lieu d'utiliser un en Set
interne et de le convertir en a List
comme valeur de retour et 2) distinctBy
est peut être plus efficace que distinct
simplement parce que vous pouvez éviter la comparaison d'égalité d'objet complète. Les deux sont des points valides. J'ai couru avec votre déclaration que "certainement cela n'a pas toujours de surcharge" et je répondais à cela et j'ai oublié que vous compariez distinct
avec distinctBy
(et pas avec to*Set
).
Iterable.distinct
fait en toMutableSet().toList()
interne. Alors ne vous inquiétez pas pour les performances :-)