На этом шаге мы рассмотрим функции, используемые для этих целей.
В NyetHack вы создали изменяемое множество уникальных имен посетителей, передавая элементы из списка в множество один за другим. Также преобразовать список в множество и обратно можно с помощью функций toSet() и toList() (или их изменяемых вариантов: toMutableSet() и toMutableList()). Распространенный трюк - вызвать toSet(), чтобы отбросить неуникальные элементы в списке. (Поэкспериментируйте в REPL.)
listOf("Eli Baggins", "Eli Baggins", "Eli Ironfoot").toSet() [Eli Baggins, Eli Ironfoot]
Рис.1. Перевод списка во множество (REPL)
Чтобы получить возможность доступа по индексу после удаления дубликатов, снова преобразуйте множество в список. Листинг 10.28. Преобразование множества в список (REPL)
val patrons = listOf("Eli Baggins", "Eli Baggins", "Eli Ironfoot") .toSet() .toList() [Eli Baggins, Eli Ironfoot] patrons[0] Eli Baggins
Рис.2. Преобразование множества в список (REPL)
Необходимость удалять дубликаты и использовать доступ по индексу очень распространена, поэтому Kotlin предоставляет функцию с именем distinct(), которая внутренне вызывает toSet() и toList().
val patrons = listOf("Eli Baggins", "Eli Baggins", "Eli Ironfoot").distinct() [Eli Baggins, Eli Ironfoot] patrons[0] Eli Baggins
Рис.3. Вызов distinct() (REPL)
Множества полезны для представления наборов данных с уникальными элементами. В следующих шагах мы закончим обзор типов коллекций в языке Kotlin, познакомившись с ассоциативными массивами.
На следующем шаге мы рассмотрим типы массивов.