Строки
Обратите внимание, что мы добавили знак доллара к имени переменной и используем её прямо в строке. В Java нам пришлось бы разбивать строку и соединять её с помощью конкатенации.
// Java println("Привет " + catName + "! Как дела?");
Кстати, такой код тоже будет работать, но первый способ гораздо удобнее.
Мы понимаем, что речь идёт о строке, поэтому можно было написать код без указания типа.
val catName = "Барсик"
Если вам вдруг захочется вывести символ доллара, то используйте экранирование.
println("Привет \$catName! Как дела?") // выводится: Привет $catName! Как дела?
Мы использовали так называемый «строковый шаблон». За кулисами происходит соединение при помощи StringBuilder, но более удобным и быстрым способом.
Длину строки можно вычислить через функцию count().
val murzik = "Мурзик" println(murzik.count())
Функции-расширения
Разработчики JetBrains добавили множество готовых функций-расширений для многих классов, в том числе и для строк. Найти их можно в файле String.kt (в студии дважды нажмите клавишу Shift и в поисковой строке наберите имя данного файла для просмотра исходника).
Некоторые примеры функций-расширений представлены ниже. На самом деле их больше, изучайте самостоятельно.
Пробежаться по строке
Строку можно рассматривать как массив символов.
val cat = "Барсик" val character = cat[2] println(character) // выводит р
Пробежаться по всей строке без использования индекса.
val cat = "Барсик" for(char in cat)
Пробежаться по всей строки с использованием индекса.
val cat = "Барсик" for (char in cat.indices)
Саму строку можно предварительно явно перевести в массив символов.
for(char in cat.toCharArray())
Можно вызывать forEach.
cat.forEach < char ->println(char) >
Если вам нужен не только символ строки, но и его индекс, то вызываем forEachIndexed.
cat.forEachIndexed println("Index $index Character $char")> // Результат Index 0 Character Б Index 1 Character а Index 2 Character р Index 3 Character с Index 4 Character и Index 5 Character к
Если нужно получить отдельный символ строки по индексу без перебора всей строки, то просто указываем нужный индекс.
val cat = "Барсик" val index = 5 println("Character at index $index in $cat is $")
Если вы укажете несуществующий индекс, то получите исключение StringIndexOutOfBoundsException, поэтому делайте проверку.
Рассмотрим пример с числами. Допустим нужно произвести арифметические действия с целыми числами и вывести результат в строке.
val a: Int = 9 val b: Int = 1 fun main(args: Array) < println("Осталось жизней: $") >
Снова используем знак доллара, а действия с числами поместили в фигурные скобки. Kotlin сама разберётся с типами данных и сделает всю работу.
Выведем второй элемент массива.
fun main(args: Array) < val names = arrayListOf("Мурзик") names.add("Васька") names.add("Барсик") println("Кота зовут $") >
Опять используем знак доллара и фигурные скобки.
Можно даже использовать условие.
val count = 9 print("value of count is $")
Многострочный текст можно создать, используя тройные кавычки. Больше нам не нужны символы перевода строки \n, а также символы типа \t, \b, \r и т.д.
val multipleStringLines = """ У лукоморья дуб зелёный; Златая цепь на дубе том: И днём и ночью кот учёный Всё ходит по цепи кругом; Идёт направо - песнь заводит, Налево - сказку говорит. """
Метод trimMargin() позволяет убрать «пустые» символы из текста по разделителю | (по умолчанию):
val myString = """This is the first line |This is the second line |This is the third line |And fourth line """ println(myString.trimMargin())
На выходе получим.
This is the first line This is the second line This is the third line And fourth line
Можно задать свой собственный разделитель и указать его в методе.
trimMargin(">")
Если первая и последняя строки длинного предложения пустые, то они будут удалены и строки.
Можем делать со строкой знакомые операции в удобной обёртке.
val cat = "Барсик" println(cat.reversed()) // кисраБ println(cat.takeLast(2)) // ик val kitty /cdn-cgi/l/email-protection" data-cfemail="1260687b7952757f737b7e3c717d7f">[email protected]" println(kitty.substringBefore("@")) // murzik
Конвертируем строку в число
Сконвертировать строку в число можно через соответствующие методы.
val str = "123" print(str.toLong())
Если нужно обработать ситуацию с null, то используйте другой метод.
val str = "123.4" println(str.toLongOrNull()) // вернёт null
По умолчанию мы подразумеваем десятичное счисление. Но возможна конвертация в другой системе счисления — двоичной, восьмеричной и т.д.
val str = "11111111" print(str.toLongOrNull(2)) //255 val str = "105" print(str.toLongOrNull(8)) //69
Также есть схожие методы toShort(), toShortOrNull(), toInt(), toIntOrNull(), toFloat(), toDouble() и т.д. Часть из них поддерживает перегруженные версии с другой системой счисления, но проверяйте поддерживаемые системы.
Не совсем про числа, но можно сконвертировать в булево значение.
val str = "false" println(str.toBoolean())
Дополняем строку символами
Можно дополнить строку символами с самого начала или в конце.
val name = "Barsik" val pad = name.padStart(10, '#') println(pad) // ####Barsik val name = "Barsik" val pad = name.padEnd(10, '*') println(pad) // Barsik****
По умолчанию символом дополнения является пробел, поэтому можно вызывать методы без второго параметра, чтобы получить строку с пробелами.
Подстроки
// подстрока с указанного индекса val result = "developer.alexanderklimov.ru".substring(10) // alexanderklimov.ru // подстрока до первого указанного разделителя val first = "developer.alexanderklimov.ru".substringBefore('.') // developer // подстрока после первого указанного разделителя val last = "developer.alexanderklimov.ru".substringAfter('.') // alexanderklimov.ru // подстрока после последнего указанного разделителя val last = "developer.alexanderklimov.ru".substringAfterLast('.') // ru // подстрока до последнего указанного разделителя val beforeLast = "developer.alexanderklimov.ru".substringBeforeLast('.') // developer.alexanderklimov
Ещё пример для получения адреса сайта без http://.
val superSite = "http://developer.alexanderklimov.ru" val index = superSite.lastIndexOf('/') println("Индекс нужного нам символа: $index") println(superSite.substring(index + 1)) // developer.alexanderklimov.ru // другой вариант println(superSite.substringAfterLast("/"))
Встроенные функции
Kotlin содержит множество встроенных удобных функций для работы со строками. Часть из них уже использовалась в примерах выше. Упомянем ещё несколько полезных функций.
val blank = " ".isBlank() // true, если пустая строка или пустые символы пробела, табуляции и т.п. // индекс последнего символа val lastIndex = "Кот Мурзик".lastIndex // 9 // переводим в верхний регистр первый символ строки // decapitalize() выполняем обратную задачу val capitalize = "кот Мурзик".capitalize() val withSpaces = "1".padStart(2) // добавляем пробел перед строкой val endZeros = "1".padEnd(3, '0') // "100" добавляем нули в конец val dropStart = "Kotlin".drop(2) // "tlin" убираем первые символы в указанном количестве val dropEnd = "Kotlin".dropLast(3) // "Kot" убираем последние символы в указанном количестве // возвращаем строку без первого символа, который удовлетворяет условию val string = "Мурзик" val result = string.dropWhile < it == 'М' >textView.text = result // урзик // возвращаем строку без последнего символа, который удовлетворяет условию val string = "Мурзик" val result = string.dropLastWhile < it == 'к' >textView.text = result // Мурзи // разбиваем на массив строк "A\nB\nC".lines() // [A, B, C] "ABCD".zipWithNext() // [(A, B), (B, C), (C, D)] // удаляем символы из заданного диапазона val string = "Кот, который гулял сам по себе" val result = string.removeRange( 3..28 // range ) // Функции removeXXX() хороши для строк в виде ##Cat##, чтобы убрать лишние символы // удаляем префикс из строки val string = "Кот, который гулял сам по себе" val result = string.removePrefix("Кот") // удаляем суффикс из строки val string = "Кот, который гулял сам по себе" val result = string.removeSuffix("себе") // удаляем заданный разделитель, который должен окружать строку с начала и с конца val string = "та, тра-та-та, мы везём с собой кота" val result = string.removeSurrounding( "та" // delimiter ) textView.text = result // , тра-та-та, мы везём с собой ко // Также можно указать разные начало и конец, которые окружают строку val string = "Тра-та-та, тра-та-та, мы везём с собой кота" val result = string.removeSurrounding( "Тра-", // prefix " кота" // suffix ) textView.text = result // та-та, тра-та-та, мы везём с собой // Добавляем отступы при явном переводе на новую строку val string = "Какой-то длинный текст, \nсостоящий из имён котов: " + "\nВаська" + "\nБарсик" + "\nРыжик" val result = string.prependIndent( " " // indent ) // Разбиваем символы на две группы. // В первую группу попадут символы в верхнем регистре, во вторую - символы в нижнем регистре val string = "Кот Васька и кот Мурзик - Друзья!" val result: Pair = string.partition < it.isUpperCase() >textView.text = result.first + ":" + result.second //КВМД:от аська и кот урзик - рузья! // Разбиваем строку на список строк. В качестве разделителя - перевод на новую строку val string = "Кот Васька\nКотМурзик\nКот Мурзик" // Split string into lines (CRLF, LF or CR) val lines: List = string.lines() textView.text = "Кол-во строк: $" lines.forEach < textView.append("\n" + it) >// Разбиваем строку на список строк с указанным числом символов. В последней строке может выводиться остаток val string = "Тра-та-та, тра-та-та, мы везём с собой кота" val list:List = string.chunked(11) list.forEach < textView.append("$it\n") >/* Тра-та-та, тра-та-та, мы везём с собой кота */ // Содержит ли строка только цифры (используем предикат) val string = "09032020" // Returns true if all characters match the given predicate. val result: Boolean = string.all < it.isDigit() >textView.append("Is the string $string contain only digit? $result") // Содержит ли строка хотя бы одну цифру (используем предикат) val string = "3 кота" // Returns true if at least one character matches the given predicate. val result: Boolean = string.any() < it.isDigit() >textView.append("Is the text \"$string\" contain any digit? $result") // Сравниваем две строки с учётом регистра val string1 = "This is a sample string." val string2 = "This is a SAMPLE string." if (string1.compareTo(string2, ignoreCase = true) == 0) < textView.append("\n\nBoth strings are equal, ignoring case.") >else
Можно фильтровать данные с помощью filter(). Допустим, мы хотим извлечь только цифры из строки.
val string = "9 жизней (2016) - Nine Lives - информация о фильме" val filteredText = string.filter < it.isDigit() >textView.text = filteredText // 92016
Если хочется решить обратную задачу и получить только символы, но не цифры — то достаточно вызвать filterNot().
val filteredText = string.filterNot
replace()/replaceRange()
Для замены отдельных символов или строк используется функция replace(). Заменим отдельные символы в строке.
val string = "Кит Кишка" val result = string.replace( 'и', // old char 'о', // new char true // ignore case Boolean = false ) textView.text = result // Кот Кошка
Можно менять подстроки.
val result = string.replace( "Собака", // old value "Кот", // new value true // ignore case ) textView.text = result // Кот - друг человека
Вариант replace() с регулярным выражением. Создадим функцию перевода строки на «драконий» язык. В результате будет создана новая строка с нужными символами.
private fun toDragonSpeak(phrase: String) = phrase.replace(Regex("[aeiou]")) < when (it.value) < "a" ->"4" "e" -> "3" "i" -> "1" "o" -> "0" "u" -> "|_|" else -> it.value > > println(toDragonSpeak("Kitten")) // K1tt3n
Можно заменять подстроки через replaceRange(), указывая нужный диапазон. Существуют две версии этого способа.
val string = "Тра-та-та, тра-та-та, мы везём с собой ежа" // The end index of the range is included // in the part to be replaced. val result = string.replaceRange( 39..40, // range "кот" // replacement ) textView.append(result) val result2 = string.replaceRange( 39, // start index 41, // end index "кот" // replacement ) textView.append("\n") textView.append(result2)
Конвертируем строку в дату
import java.time.LocalDate var parsedDate = LocalDate.parse("2020-07-27") println(parsedDate)
Есть также вариант с использованием DateTimeFormatter.
import java.time.LocalDate import java.time.format.DateTimeFormatter var parsedDate = LocalDate.parse("Wednesday, July 27, 2020", DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy")) println("Wednesday, July 27, 2020 : " + parsedDate) parsedDate = LocalDate.parse("July 27, 2020", DateTimeFormatter.ofPattern("MMMM dd, yyyy")) println("July 27, 2020 : " + parsedDate) parsedDate = LocalDate.parse("14/02/2020", DateTimeFormatter.ofPattern("dd/MM/yyyy")) println("14/02/2020 : "+parsedDate) parsedDate = LocalDate.parse("27 July,2019", DateTimeFormatter.ofPattern("dd MMMM,yyyy")) println("27 July,2019 : " + parsedDate) parsedDate = LocalDate.parse("11th April,2012", DateTimeFormatter.ofPattern("dd'th' MMMM,yyyy")) println("11th April,2012 : " + parsedDate) parsedDate = LocalDate.parse("27 Feb, 2001", DateTimeFormatter.ofPattern("dd MMM, yyyy")) println("27 Feb, 2001 : " + parsedDate)
StringBuilder
У класса StringBuilder в Kotlin есть отдельная функция buildString(), которая поможет сократить количество кода для получения строки.
fun printAlphabet() = buildString
Перебрать строку в обратном направлении в Kotlin
В этой статье рассматриваются различные способы перебора строки в обратном порядке в Kotlin.
1. Использование цикла
Вы можете использовать простой цикл for для обработки каждого символа строки в обратном направлении. Этот подход очень эффективен для строк с меньшим количеством символов.
val s = «Reverse String»
// использование простого цикла for
for ( i in s . length — 1 downTo 0 ) <
print ( s [ i ] )
2. Преобразовать в массив символов
В этом подходе вы сначала переворачиваете строку. Затем вы конвертируете обратное String в массив символов с помощью String.toCharArray() функция. Наконец, вы повторяете char[] используя цикл foreach, как показано ниже:
val s = «Reverse String»
// перевернуть строку и преобразовать ее в массив `char[]`
val chars = StringBuilder ( s ) . reverse ( ) . toString ( )
. toCharArray ( )
// перебираем char[] с помощью цикла foreach
for ( ch in chars ) <
3. Использование CharacterIterator
Вы также можете использовать CharacterIterator интерфейс, который обеспечивает двунаправленную итерацию для String.
import java . text . CharacterIterator
import java . text . StringCharacterIterator
// Проходим по строке в обратном направлении, от конца к началу
fun traverseBackwards ( itr : CharacterIterator ) <
var ch = itr . last ( )
while ( ch != CharacterIterator . DONE )
ch = itr . previous ( )
val s = "Reverse String"
val it : CharacterIterator = StringCharacterIterator ( s )
traverseBackwards ( it )
4. Использование String.Split() функция
String.split() разбивает указанную строку и возвращает массив строк, созданный путем разбиения этой строки.
val s = «Reverse String»
val arr = s . split ( «» . toRegex ( ) ) . toTypedArray ( )
for ( i in arr . indices . reversed ( ) ) <
print ( arr [ i ] )
Это все об итерации строки в обратном направлении в Kotlin.
Оценить этот пост
Средний рейтинг 4.95 /5. Подсчет голосов: 21
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Перевернуть строку в Kotlin
В этой статье рассматриваются различные способы реверсирования строки в Kotlin.
Строка неизменна в Kotlin. Это означает, что мы не можем перевернуть строку на месте перетасовывая его символы. Однако вы можете создать новую строку с символами исходной строки в обратном порядке.
1. Использование reversed() функция
Стандартный способ перевернуть строку в Kotlin — использовать reversed() функция. Он возвращает строку с символами в обратном порядке.
List: специфичные операции
List — самый популярный из всех типов коллекций в Kotlin. Он предоставляет мощный набор операций благодаря наличию доступа к элементам по индексу.
Получение элементов по индексу
Списки поддерживают все стандартные операции для получения элементов: elementAt() , first() , last() и другие, перечисленные в разделе Выбор одного элемента. Списки характерны тем, что предоставляют доступ к элементам по индексу, поэтому именно по индексу проще всего получить необходимый элемент. Это осуществляется с помощью функции get() , которая принимает индекс в качестве аргумента. Также можно использовать сокращённый синтаксис — [index] .
Если размер списка меньше указанного индекса, то будет выброшено исключение. Есть ещё две функции, которые помогут этого избежать:
- getOrElse() — позволяет вам предоставить функцию для вычисления значения по умолчанию. Если по указанному индексу элемент не был найден, то будет возвращён результат вычисления этой функции.
- getOrNull() — возвращает null в качестве значения по умолчанию.
fun main() < val numbers = listOf(1, 2, 3, 4) println(numbers.get(0)) // 1 println(numbers[0]) // 1 //numbers.get(5) // exception! println(numbers.getOrNull(5)) // null println(numbers.getOrElse(5, )) // 5 >
Получение части списка
Помимо обычных операций для Выборки элементов, списки предоставляют функцию subList() , которая возвращает представление указанного диапазона элементов в виде списка. Таким образом, если элемент исходной коллекции будет изменён, то он также изменится и в списке, созданном с помощью функции subList() , и наоборот.
fun main() < val numbers = (0..13).toList() println(numbers.subList(3, 6)) // [3, 4, 5] >
Поиск позиции элемента
Линейный поиск
В любом списке вы можете найти позицию элемента с помощью функций indexOf() и lastIndexOf() . Они возвращают первую и последнюю позицию элемента, равного заданному аргументу. Если таких элементов нет, то обе функции возвращают -1 .
fun main() < val numbers = listOf(1, 2, 3, 4, 2, 5) println(numbers.indexOf(2)) // 1 println(numbers.lastIndexOf(2)) // 4 >
Также существуют две функции, которые принимают предикат и ищут соответствующие ему элементы:
- indexOfFirst() — возвращает индекс первого элемента, соответствующего заданному предикату или -1 , если таких элементов нет.
- indexOfLast() — возвращает индекс последнего элемента, соответствующего заданному предикату или -1 , если таких элементов нет.
fun main() < val numbers = mutableListOf(1, 2, 3, 4) println(numbers.indexOfFirst < it >2>) // 2 println(numbers.indexOfLast < it % 2 == 1>) // 2 >
Бинарный поиск в отсортированном списке
Ещё один способ поиска элементов в списке – бинарный поиск. Он работает значительно быстрее остальных встроенных функций поиска, но для его использования требуется, чтобы список был отсортирован по возрастанию в соответствии с определённым порядком: естественным или любым другим, указанным в параметре функции. В противном случае результат не будет определён.
Чтобы найти элемент в отсортированном списке, вызовите функцию binarySearch() , передав ей искомое значение в качестве аргумента. Если такой элемент существует, функция вернёт его индекс; в противном случае она вернёт (-insertionPoint — 1) , где insertionPoint — это индекс, в который этот элемент должен быть вставлен, чтобы список оставался отсортированным. Если существует более одного элемента с указанным значением, функция может вернуть любой из их индексов.
Вы также можете указать диапазон индексов для поиска: в этом случае функция выполняет поиск только между двумя предоставленными индексами.
fun main() < val numbers = mutableListOf("one", "two", "three", "four") numbers.sort() println(numbers) // [four, one, three, two] println(numbers.binarySearch("two")) // 3 println(numbers.binarySearch("z")) // -5 println(numbers.binarySearch("two", 0, 2)) // -3 >
Бинарный поиск с Comparator
Если элементы списка не являются Comparable , вы должны предоставить Comparator , который будет использован в бинарном поиске. Список должен быть отсортирован по возрастанию в соответствии с этим Comparator . Давайте посмотрим на пример:
data class Product(val name: String, val price: Double) fun main() < val productList = listOf( Product("WebStorm", 49.0), Product("AppCode", 99.0), Product("DotTrace", 129.0), Product("ReSharper", 149.0)) println( productList .binarySearch(Product("AppCode", 99.0), compareBy < it.price >.thenBy < it.name >) ) // 1 >
В данном примере есть:
- список из экземпляров класса Product , которые не являются Comparable .
- Comparator , который определяет порядок: продукт p1 предшествует продукту p2 , если цена p1 меньше, чем цена p2 . Итак, имея список, отсортированный по возрастанию в соответствии с этим порядком, мы используем binarySearch() , чтобы найти индекс указанного Product .
Пользовательские компараторы также удобны, когда для сортировки списка используется порядок, отличный от естественного, например, без учета регистра для элементов String .
fun main() < val colors = listOf("Blue", "green", "ORANGE", "Red", "yellow") println(colors.binarySearch("RED", String.CASE_INSENSITIVE_ORDER)) // 3 >
Бинарный поиск с функцией сравнения
Бинарный поиск с функцией сравнения (comparison) позволяет находить элементы без предоставления явных значений для поиска. Вместо этого он принимает элементы функции сравнения, преобразованные в Int , и ищет элемент, для которого функция возвращает ноль. Список должен быть отсортирован по возрастанию в соответствии с порядком, предоставленным функцией; другими словами, возвращаемые функцией значения должны расти от одного элемента списка к следующему.
import kotlin.math.sign data class Product(val name: String, val price: Double) fun priceComparison(product: Product, price: Double) = sign(product.price - price).toInt() fun main() < val productList = listOf( Product("WebStorm", 49.0), Product("AppCode", 99.0), Product("DotTrace", 129.0), Product("ReSharper", 149.0)) println(productList.binarySearch < priceComparison(it, 99.0) >) // 1 >
Бинарный поиск как с компаратором, так и с функцией сравнения может выполняться для диапазонов списков.
Операции записи
В дополнение к изменяющим коллекцию операциям, которые описаны в разделе Операции записи коллекций, изменяемые списки поддерживают операции записи, характерные только для списков. Эти операции используют индекс для доступа к элементам, что расширяет возможности для изменения списка.
Добавление элементов
Чтобы добавить элементы в определённую позицию в списке, используйте add() и addAll() , которым в качестве аргумента передайте позицию для вставки элемента. Все элементы, которые идут после указанной позиции, будут смещены вправо.
fun main() < val numbers = mutableListOf("one", "five", "six") numbers.add(1, "two") numbers.addAll(2, listOf("three", "four")) println(numbers) // [one, two, three, four, five, six] >
Обновление элементов
Списки также предоставляют функцию для замены элемента в заданной позиции — set() , у которой есть операторная форма [] . set() не меняет индексы других элементов.
fun main() < val numbers = mutableListOf("one", "five", "three") numbers[1] = "two" println(numbers) // [one, two, three] >
Функция fill() просто заменяет все элементы коллекции на указанное значение.
fun main() < val numbers = mutableListOf(1, 2, 3, 4) numbers.fill(3) println(numbers) // [3, 3, 3, 3] >
Удаление элементов
Чтобы удалить элемент из определённой позиции списка, используйте функцию removeAt() , передав ей в качестве аргумента эту позицию. Все индексы элементов, которые идут после удаляемого, будут уменьшены на единицу.
fun main() < val numbers = mutableListOf(1, 2, 3, 4, 3) numbers.removeAt(1) println(numbers) // [1, 3, 4, 3] >
Сортировка
В разделе Сортировка коллекций описаны операции, которые возвращают элементы коллекции в определённом порядке. Для изменяемых списков в стандартной библиотеке есть аналогичные функции-расширения, выполняющие сортировку, но вместо возврата нового отсортированного списка они изменяют порядок элементов в исходном списке.
Подобные функции сортировки названы похожими именами, но без суффикса ed/d :
- sort* вместо sorted* в именах всех функций сортировки: sort() , sortDescending() , sortBy() и так далее.
- shuffle() вместо shuffled() .
- reverse() вместо reversed() .
Функция asReversed() , вызываемая к изменяемому списку, возвращает другой изменяемый список, который является перевёрнутым представлением исходного списка. Вместе с изменением этого представления вы изменяете и исходный список.
В следующем примере показаны функции сортировки для изменяемых списков:
fun main() < val numbers = mutableListOf("one", "two", "three", "four") numbers.sort() println("Sort into ascending: $numbers") // Sort into ascending: [four, one, three, two] numbers.sortDescending() println("Sort into descending: $numbers") // Sort into descending: [two, three, one, four] numbers.sortBy < it.length >println("Sort into ascending by length: $numbers") // Sort into ascending by length: [two, one, four, three] numbers.sortByDescending < it.last() >println("Sort into descending by the last letter: $numbers") // Sort into descending by the last letter: [four, two, one, three] numbers.sortWith(compareBy < it.length >.thenBy < it >) println("Sort by Comparator: $numbers") // Sort by Comparator: [one, two, four, three] numbers.shuffle() println("Shuffle: $numbers") // Shuffle: [one, two, three, four] numbers.reverse() println("Reverse: $numbers") // Reverse: [four, three, two, one] >
© 2015—2023 Open Source Community