Menu
Coddy logo textTech

Объединение сравнений

Часть раздела Логика и управление потоком путешествия по Kotlin на Coddy. Урок 37 из 63.

Используйте sortedWith, чтобы предоставить компаратор. compareBy<String> { it.length } сравнивает длину слов; цепочка .thenBy { it } сравнивает сами слова, если их длины совпадают. Последующие ключи сравнения используются только тогда, когда все предыдущие ключи совпадают.

Внутри main:

val order = compareBy<String> { it.length }.thenBy { it }
println(listOf("bb", "a", "aa").sortedWith(order))

Сначала сортировка по длине ставит a на первое место; алфавитное сравнение разрешает равенство двухсимвольных строк.

thenBy разрешает спорные случаи, не заменяя предыдущий ключ сравнения.

challenge icon

Задание

Средне

Завершите wordOrder с параметрами words: List<String>. Отсортируйте слова в нижнем регистре, состоящие из ASCII-символов, по возрастанию длины, а при совпадении длины — в алфавитном порядке.

Если выше не указаны более строгие ограничения, коллекции содержат не более 100 элементов на каждом уровне, а целочисленные аргументы и целочисленные значения коллекций находятся в диапазоне от -1000 до 1000. Текст, предоставленный для разбора, может содержать некорректные представления или представления, выходящие за допустимый диапазон, как описано выше.

Верните значение типа List<String>. Сохраните предоставленный код ввода/вывода. Он считывает скалярные аргументы по одному в строке; список начинается с его количества элементов, за которым следуют элементы, а отображение начинается с количества его записей, за которым следуют каждый ключ и значение. Вложенные списки повторяют формат «количество и элементы» для каждой строки. Предоставленный main выводит возвращаемое значение, за которым следует один перевод строки. Для списков используется стандартный формат Kotlin со скобками; не выводите дополнительные метки.

Попробуйте сами

fun wordOrder(words: List<String>): List<String> {
    // Напишите ваше решение здесь.
    return emptyList()
}
fun main() {
    val wordsCount = readln().toInt()
    val words = mutableListOf<String>()
    for (i0 in 0 until wordsCount) {
        val wordsItem = readLine().orEmpty()
        words.add(wordsItem)
    }
    println(wordOrder(words))
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Песочница Kotlin