pix*_*xel 3 dictionary max kotlin
我想找到具有最大值的所有条目。
我来到了:
val myMap = mapOf<Int, Int>(...)
val maxEntries = myMap.maxBy { it.value }
?.let { max -> myMap.filter { it.value == max.value } }
?.entries
?: emptySet()
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更惯用的解决方案。
您可以将您所拥有的简化为以下内容:
val maxValue = myMap.values.maxOrNull() // or max() depending on Kotlin version
val maxEntries = myMap.filterValues { it == maxValue }
Run Code Online (Sandbox Code Playgroud)
这样你就可以保留Map<Int, Int>- 类型,我认为这样更具可读性。请注意,maxValue存在null并没有真正的伤害,因为只有null当地图为空时您才会得到...过滤然后在空地图上仍然返回空地图。这可能也是该解决方案唯一*不好的部分。如果您有一个空地图,则此变体会在以下情况下构造一个新的空地图:filterValues调用时会构造一个新的空映射。
如果您介意这一点,那么以下内容更合适:
val maxEntries = myMap.values.maxOrNull()?.let { maxValue ->
myMap.filterValues { it == maxValue }
} ?: emptyMap()
Run Code Online (Sandbox Code Playgroud)
* 除了迭代地图两次之外唯一不好的部分。如果你想克服这个问题,那么我认为你必须实现自己的特定函数来处理这两个问题,同时检查最大值和收集。