🗒 Задача¶
Игра имеет систему прокачки персонажей по различным навыкам. Опыт в каждом навыке хранится в виде пары ключ-значение, где ключ — это название навыка (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())
}