Flutter中按值排序Map<String,double>并取前4项合并其余
Dart 按值排序Map并合并剩余项
针对你需要的对<String, double>类型Map按值排序、保留前4项并将剩余项合并为'Others'的需求,可以用以下代码实现:
示例输入
Map<String, dynamic> mymap = { 'A': 2000, 'B': 8000, 'C': 300, 'D': 3890, 'E': 8030, 'F': 300, 'G': 900, };
实现代码
// 把Map条目转为列表并按值降序排序 final sortedEntries = mymap.entries.toList() ..sort((a, b) => b.value.compareTo(a.value)); // 提取排序后的前4个条目 final top4Entries = sortedEntries.take(4); // 计算剩余条目的值总和 final othersTotal = sortedEntries.skip(4) .fold(0.0, (sum, entry) => sum + (entry.value as double)); // 拼装最终结果Map final resultmap = { ...Map.fromEntries(top4Entries), 'Others': othersTotal, };
输出结果
{ 'E': 8030, 'B': 8000, 'D': 3890, 'A': 2000, 'Others': 1500.0 }
代码说明
- 先将Map的键值对转为列表,通过
sort方法实现降序排列(用b.value.compareTo(a.value)确保从大到小排序) - 用
take(4)直接获取排序后的前4个条目 skip(4)跳过前4项,通过fold累加剩余条目的值,将值转为double保证类型统一- 最后通过展开运算符把前4项的Map和'Others'项合并成最终结果
如果原Map的条目数≤4,'Others'的值会自动为0.0,代码能兼容这种情况。
内容的提问来源于stack exchange,提问作者Irfan Ganatra
相关产品推荐
相关产品推荐

