¿Cómo eliminar duplicados de un Array<String?>in kotlin?
Respuestas:
Utilice la distinctfunción de extensión :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
También hay una distinctByfunción que permite especificar cómo distinguir los elementos:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Como @ mfulton26 sugerido, también se puede utilizar toSet, toMutableSety, si no es necesario el orden original que se conserva, toHashSet. Estas funciones producen a en Setlugar de a Listy deberían ser un poco más eficientes que distinct.
Puede resultarle útil:
toSeto toMutableSetque tienen menos gastos generales que distincty si el pedido no importa, puede usar toHashSet.
to*Setes más eficiente (espacio y tiempo) que distinct[By]porque devuelve Setdirectamente en lugar de usar un Setinternamente y convertirlo en un Listvalor de retorno y 2) distinctByes puede ser más eficiente que distinctsimplemente porque puede evitar la comparación completa de igualdad de objetos. Ambos son puntos válidos. Corrí con su declaración de que "ciertamente no siempre tiene gastos generales" y respondí a eso y pasé por alto que se estaba comparando distinctcon distinctBy(y no con to*Set).
Iterable.distinctrealidad lo hace toMutableSet().toList()internamente. Así que no te preocupes por el rendimiento :-)