You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:20:29