Как удалить дубликаты из 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()внутренне. Так что не беспокойтесь о производительности :-)