Як видалити дублікати з Array<String?>
in kotlin?
Відповіді:
Використовуйте функцію 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()
внутрішньо. Тож не турбуйтеся про виступ :-)