Come rimuovere i duplicati da un Array<String?>in kotlin?
Risposte:
Usa la distinctfunzione di estensione :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
C'è anche una distinctByfunzione 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, toMutableSete, se non è necessario l'ordinamento originale da conservare, toHashSet. Queste funzioni producono a Setinvece di a Liste dovrebbero essere un po 'più efficienti di distinct.
Potresti trovare utile:
toSeto toMutableSetche hanno meno overhead di distincte se l'ordine non è importante puoi usare toHashSet.
to*Setè più efficiente (spazio e tempo) rispetto al distinct[By]fatto che restituisce Setdirettamente invece di utilizzare Setinternamente e convertirlo in a Listcome valore di ritorno e 2) distinctByè può essere più efficiente del distinctsemplice 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 distinctcon distinctBy(e non con to*Set).
Iterable.distinctrealtà lo fa toMutableSet().toList()internamente. Quindi non preoccuparti per la performance :-)