¿Cómo eliminar duplicados de un Array<String?>
in kotlin?
Respuestas:
Utilice la distinct
función de extensión :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
También hay una distinctBy
funció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
, toMutableSet
y, si no es necesario el orden original que se conserva, toHashSet
. Estas funciones producen a en Set
lugar de a List
y deberían ser un poco más eficientes que distinct
.
Puede resultarle útil:
toSet
o toMutableSet
que tienen menos gastos generales que distinct
y si el pedido no importa, puede usar toHashSet
.
to*Set
es más eficiente (espacio y tiempo) que distinct[By]
porque devuelve Set
directamente en lugar de usar un Set
internamente y convertirlo en un List
valor de retorno y 2) distinctBy
es puede ser más eficiente que distinct
simplemente 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 distinct
con distinctBy
(y no con to*Set
).
Iterable.distinct
realidad lo hace toMutableSet().toList()
internamente. Así que no te preocupes por el rendimiento :-)