Flutter中如何查找Map最大值对应的Key?附目标Map及需求说明
在Flutter/Dart中查找Map最大值对应的Key
嘿,针对你给出的这份情感分数Map,我来分享两种简单直接的方法,帮你快速找出最大值对应的Key(也就是你要的neutral):
方法一:使用fold遍历比较
fold是Dart集合里非常实用的方法,它可以遍历Map的所有键值对,逐个比较值的大小,最终保留最大值对应的键值对:
void main() { final emotionScores = { 'anger': 0.0, 'contempt': 0.02, 'disgust': 0.0, 'fear': 0.0, 'happiness': 0.0, 'neutral': 0.978, 'sadness': 0.002, 'surprise': 0.0 }; // 用fold找出最大值对应的entry final maxEntry = emotionScores.entries.fold( emotionScores.entries.first, // 初始值取第一个键值对 (previousEntry, currentEntry) => currentEntry.value > previousEntry.value ? currentEntry : previousEntry, ); print(maxEntry.key); // 输出结果:neutral }
原理很简单:我们从第一个键值对开始,每遍历到一个新的键值对,就和当前记录的最大值比较,如果新的值更大,就更新记录的键值对,遍历结束后就能拿到最大值对应的Key了。
方法二:排序后取首项
另一种思路是把Map的键值对转换成列表,按值的大小降序排序,然后直接取第一个元素的Key:
void main() { final emotionScores = { 'anger': 0.0, 'contempt': 0.02, 'disgust': 0.0, 'fear': 0.0, 'happiness': 0.0, 'neutral': 0.978, 'sadness': 0.002, 'surprise': 0.0 }; // 将entries转为列表并按value降序排序 final sortedEntries = emotionScores.entries.toList() ..sort((entryA, entryB) => entryB.value.compareTo(entryA.value)); final maxKey = sortedEntries.first.key; print(maxKey); // 输出结果:neutral }
小提示:如果Map里存在多个值相同的最大值,这两种方法都会返回第一个遇到的那个Key,这点可以根据你的实际需求调整逻辑~
内容的提问来源于stack exchange,提问作者user12034457
相关产品推荐
相关产品推荐

