Выбор ответа Middle Задачи на Kotlin обновлено
Сортировка по двум ключам
Вопрос
Как отсортировать список пар (score, name) по убыванию очков, а при равенстве по имени?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: sortedWith(compareByDescending<Pair<Int, String { it.first }.thenBy { it.second }). Составной компаратор описывает оба ключа явно.
Варианты ответа
sortedBy { it.first }.sortedBy { it.second }: две устойчивые сортировкиsortedDescending():Pairсравнивается по first, затем по secondsortedByDescending { it.first + it.second }с ключом из обоих полейsortedWith(compareByDescending<Pair<Int, String>> { it.first }.thenBy { it.second })правильный ответ
Разбор
Составной компаратор описывает оба ключа явно. Две сортировки подряд тоже возможны, но в обратном порядке ключей: сначала по имени, потом устойчиво по очкам. Если сортировать сначала по очкам, а потом по имени, вторая сортировка перемешает результат первой. sortedDescending() для Pair не скомпилируется: Pair не Comparable. Сложение числа со строкой не даёт осмысленного ключа.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.