Come rimuovere i duplicati da un Array<String?>
in kotlin?
Risposte:
Usa la distinct
funzione di estensione :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
C'è anche una distinctBy
funzione che permette di specificare come distinguere gli elementi:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Come @ mfulton26 suggerito, è anche possibile utilizzare toSet
, toMutableSet
e, se non è necessario l'ordinamento originale da conservare, toHashSet
. Queste funzioni producono a Set
invece di a List
e dovrebbero essere un po 'più efficienti di distinct
.
Potresti trovare utile:
toSet
o toMutableSet
che hanno meno overhead di distinct
e se l'ordine non è importante puoi usare toHashSet
.
to*Set
è più efficiente (spazio e tempo) rispetto al distinct[By]
fatto che restituisce Set
direttamente invece di utilizzare Set
internamente e convertirlo in a List
come valore di ritorno e 2) distinctBy
è può essere più efficiente del distinct
semplice perché puoi evitare il confronto completo dell'uguaglianza degli oggetti. Entrambi sono punti validi. Mi sono imbattuto con la tua affermazione che "certamente non sempre ha un sovraccarico" e stavo rispondendo a questo e ho trascurato che stavi confrontando distinct
con distinctBy
(e non con to*Set
).
Iterable.distinct
realtà lo fa toMutableSet().toList()
internamente. Quindi non preoccuparti per la performance :-)