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