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
相关产品推荐
相关产品推荐

