Перейти к содержанию

🗒 Задача

Игра имеет систему прокачки персонажей по различным навыкам. Опыт в каждом навыке хранится в виде пары ключ-значение, где ключ — это название навыка (String), а значение — количество очков опыта (Int).

Создай extension функцию для интерфейса Map<String, Int> с названием maxCategory, которая будет возвращать название навыка, в котором у игрока наибольшее количество очков опыта. Если два или более навыка имеют одинаковое максимальное значение, функция должна возвращать первый найденный из них.

❌ Ошибки

✏️ Комментарии

Решение рабочее, однако, не совсем по ТЗ. Требуется создать экстеншн, который расширяет именно класс Map.

Если так будет проще – тут можно вообще отказаться от собственного класса.

🧾 Решение

fun Map<String, Int>.maxCategory(): String? {
    return this.maxByOrNull { it.value }?.key
}

// или
fun <K, V : Comparable<V>> Map<K, V>.maxCategory() = this.maxByOrNull { it.value }?.key
// этот вариант работает не только со строками и Int, а любыми объектами в качестве ключей
// и любыми значенями, которые можно сравнивать между собой

fun main() {
    val experiencePoints = mapOf("Бой" to 120, "Магия" to 150, "Выживание" to 100)
    println(experiencePoints.maxCategory())
}