从 Kotlin 中的字符串映射中获取最大值



我正在使用以下代码

val maxEntries = myMap.values.max()?.let {
maxValue -> myMap.filterValues { it == maxValue }
} ?: emptyMap()

对于低于 100 但 100 及以上的值,它选择下一个最高值

地图:{0=65, 1=2, 2=100, 3=1, 4=11, 5=6, 6=46, 7=31}

最大值打印1:{0=65}

再比如:

地图:{0=3, 1=3, 2=3, 3=3, 4=7, 5=6}

最大值打印2:{4=7}

我也试过这种方式

val maxEntries = myMap.maxBy { it.value }?.value!!.toInt()

打印1:65

地图HashMap<String, String>

我想,你忘了说你的值是String型,而不是IntLong.这就是为什么它们被比作字符串(b > ab > abcgdf6 > 1如此6 > 106 > 1abcgfs65 > 100(。当您想将字符串作为数字进行比较时,您需要将它们转换为数字或写入比较器。如果您确定这些字符串将始终是数字,只需使用

myMap.maxBy { it.value.toLong() }
// or for not very big numbers:
myMap.maxBy { it.value.toInt() }

或者,当您最后需要 Int 值时,也许您应该在此操作之前将字符串转换为数字。

如果你想找到最大值,无论是键还是值,它应该是:

myMap.maxBy { max(it.key.toInt(), it.value.toInt()) }

最新更新