dictionary - 从 kotlin map 中查找所有最大条目?

标签 dictionary kotlin max

我想找到所有具有最大值的条目。

我来了:

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/

相关文章:

python - 日期对象只有年和月

file - 日志文件不会生成完整的日志,尽管执行已完成

flutter - GetStream.io通过extraField过滤事件

max - OpenCL 中 float 的原子最大值

python - 从嵌套字典中删除所有 None 值

dictionary - Groovy - 将 map 列表合并为单个 map

mysql - 限制每行返回的最大值

PHP 捕获最大执行时间错误

c# - 从 xml 创建字典

java - .class 文件在哪里?