Расширение карты в Kotlin
Функция-расширение для Map объявляется с типами
ключа и значения в угловых скобках. В this
лежит карта: по ней можно идти циклом for
и читать entry.value или entry.key:
fun Map<String, Int>.maxValueOrZero(): Int {
if (this.isEmpty()) {
return 0
}
var best = 0
for (entry in this) {
if (entry.value > best) {
best = entry.value
}
}
return best
}
fun main() {
val scores = mapOf("ann" to 8, "bob" to 12)
println(scores.maxValueOrZero())
}
Пустая карта обрабатывается отдельно, чтобы не искать максимум среди пустого набора. Сумму всех значений можно собрать так же:
fun Map<String, Int>.valuesSum(): Int {
var total = 0
for (entry in this) {
total += entry.value
}
return total
}
fun main() {
val stock = mapOf("pen" to 3, "book" to 5)
println(stock.valuesSum())
}
Объявите функцию maxValueOrZero для
Map<String, Int>. Для карты
mapOf("x" to 4, "y" to 9) выведите
наибольшее значение.
Объявите функцию keyCount для
Map<String, Int>. Она возвращает
число записей в карте. Проверьте пустую карту
mapOf<String, Int> и карту с двумя
парами, выведите оба ответа.