Jak usunąć duplikaty z Array<String?>kotlina?
Odpowiedzi:
Użyj distinctfunkcji rozszerzenia :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
Istnieje również distinctByfunkcja, która pozwala określić, jak rozróżnić elementy:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Jak @ mfulton26 zasugerował, można również używać toSet, toMutableSeta jeśli nie trzeba oryginalną kolejność być zachowane, toHashSet. Te funkcje tworzą Setzamiast a Listi powinny być nieco bardziej wydajne niż distinct.
Może ci się przydać:
toSetlub toMutableSetktóre mają mniejszy narzut niż, distincta jeśli zamówienie nie ma znaczenia, możesz użyć toHashSet.
to*Setjest bardziej wydajne (przestrzeń i czas) niż distinct[By]dlatego, że zwraca Setbezpośrednio, zamiast używać Setwewnętrznie i konwertować je na a Listjako wartość zwracaną i 2) distinctByjest może być bardziej wydajne niż distinctpo prostu dlatego, że można uniknąć pełnego porównania równości obiektów. Oba są ważnymi punktami. Pobiegłem z twoim stwierdzeniem, że „z pewnością nie zawsze ma narzuty” i odpowiadałem na to i przeoczyłem, że porównujesz się distinctz distinctBy(a nie z to*Set).
Iterable.distinctfaktycznie działa toMutableSet().toList()wewnętrznie. Więc nie martw się o wydajność :-)