Как удалить дубликаты из Array<String?>
котлина?
Ответы:
Используйте distinct
функцию расширения :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
Также есть distinctBy
функция , позволяющая указать, как различать предметы:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Как @ mfulton26 предложил, вы можете также использовать toSet
, toMutableSet
и, если вам не нужен оригинальный порядок в целости и сохранности toHashSet
. Эти функции производят Set
вместо a List
и должны быть немного более эффективными, чем distinct
.
Вам могут пригодиться:
toSet
или, toMutableSet
которые имеют меньше накладных расходов, чем distinct
и, если порядок не имеет значения, вы можете использовать toHashSet
.
to*Set
более эффективен (пространство и время), чем distinct[By]
потому, что он возвращает Set
напрямую, а не использует Set
внутренне и преобразует его в качестве List
возвращаемого значения и 2) distinctBy
является может быть более эффективным, чем distinct
просто потому, что вы можете избежать сравнения полного равенства объектов. Оба являются действительными пунктами. Я побежал с вашим утверждением, что «конечно, это не всегда накладные расходы», и я отвечал на это и упустил из виду, что вы сравнивали distinct
с distinctBy
(а не с to*Set
).
Iterable.distinct
действительно, toMutableSet().toList()
внутренне. Так что не беспокойтесь о производительности :-)