Dart中如何查找Map<Object?, Object?>最大值对应的键
实现方案
直接补全赋值逻辑即可,适配键名不固定、Map可空的场景,运行后示例中highestValue将正确得到"Luke"的结果。
String? highestValue; Map<Object?, Object?>? points = { "Vader": 40, "Obi-Wan": 20, "Luke": 50, }; highestValue = points?.entries .reduce((curr, next) { final currValue = (curr.value as num?) ?? 0; final nextValue = (next.value as num?) ?? 0; return currValue > nextValue ? curr : next; }) .key as String?;
逻辑细节
- 用
?.安全符处理points为null的边界,此时highestValue会直接返回null,不会触发空指针错误 - 对Map的value做了类型兼容处理,将Object?类型的value转为数字类型,null或非数字值默认按0计算,避免类型转换异常
- 遍历过程中逐条对比键值对的value大小,始终保留value更大的条目,全程不需要依赖固定键名
- 如果存在多个value同为最大值的条目,逻辑会返回遍历顺序中第一个出现的最大值对应键
- 若需要兼容空Map场景,可以在调用reduce前增加空Map判断,空场景直接赋值null即可
内容的提问来源于stack exchange,提问作者Bernhard
相关产品推荐
相关产品推荐

