我想找到所有具有最大值的条目。
我来了:
val myMap = mapOf<Int, Int>(...)
val maxEntries = myMap.maxBy { it.value }
?.let { max -> myMap.filter { it.value == max.value } }
?.entries
?: emptySet()
但我想知道是否有更惯用的解决方案。
最佳答案
你可以简化你所拥有的东西,如下所示:
val maxValue = myMap.values.maxOrNull() // or max() depending on Kotlin version
val maxEntries = myMap.filterValues { it == maxValue }
这样你就可以保留 Map<Int, Int>
-type 我认为这样更易读。注意 maxValue
正在null
并没有真正伤害,因为你只会得到 null
如果 map 是空的...过滤然后在空 map 上仍然返回空 map 。这可能也是该解决方案唯一*不好的部分。如果您有一个空 map ,此变体会在 filterValues
时构造一个新的空 map 。被称为。
如果您介意,那么以下内容更合适:
val maxEntries = myMap.values.maxOrNull()?.let { maxValue ->
myMap.filterValues { it == maxValue }
} ?: emptyMap()
* 除了遍历 map 两次之外唯一不好的部分。如果你想克服这个问题,那么我认为你必须实现自己的特定功能来处理这两者,同时检查最大值和收集。
关于dictionary - 从 kotlin map 中查找所有最大条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905641/