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

Flutter中如何合并两个Map对象并对相同key对应的值求和

Flutter合并Map并对相同key数值求和的实现方案

我们先明确待合并的两个Map示例:

final map1 = <String, int>{"a": 10, "b": 6};
final map2 = <String, int>{"a": 10, "b": 6, "c": 7, "d": 8};

下面提供两种常用实现方式:

方式一:原生遍历实现(无第三方依赖)

不需要引入任何额外包,兼容性最强,逻辑也很直观:

// 封装合并方法
Map<String, int> mergeSum(Map<String, int> a, Map<String, int> b) {
  // 先收集两个Map的所有不重复key
  final allKeys = <String>{...a.keys, ...b.keys};
  final result = <String, int>{};
  for (var key in allKeys) {
    // 单个Map中不存在的key取值默认按0计算
    result[key] = (a[key] ?? 0) + (b[key] ?? 0);
  }
  return result;
}

// 调用测试
final mergedMap = mergeSum(map1, map2);
// 最终结果:{a: 20, b: 12, c: 7, d: 8}

方式二:用collection包快捷实现

如果项目已经依赖collection工具包(Flutter项目通常默认间接依赖该包),可以直接调用封装好的merge扩展方法,代码更简洁:
首先导入依赖:

import 'package:collection/collection.dart';

调用代码:

final mergedMap = map1.merge(map2, (int v1, int v2) => v1 + v2);
// 最终结果和上面原生实现完全一致

该方法的逻辑是:保留两个Map的所有key,相同key对应的数值传入回调处理,这里直接返回两个值的和即可;仅在单个Map中存在的key会直接保留原值,不需要额外处理

内容的提问来源于stack exchange,提问作者Aung Zin Moe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:00