如何将同键的Map合并为键对应值列表的Map组成的列表?
解决方案
实现思路
核心是先通过临时Map聚合相同键的所有值,再将聚合后的结构转换为你期望的列表格式:
- 初始化临时Map,存储键对应的数值列表
- 遍历输入列表,提取每个小Map的键和值,将值追加到对应键的列表中
- 把临时Map的每一项转换为单个键的Map,收集成最终列表
代码实现(Dart)
void main() { List<Map<int, dynamic>> myMap = [ {1: 88550}, {1: 89887}, {1: 93297}, {1: 93297}, {1: 93297}, {1: 94863}, {2: 95141}, {2: 95141}, {2: 110110}, ]; // 临时聚合Map Map<int, List<dynamic>> tempAggregate = {}; for (var item in myMap) { // 取出每个小Map的唯一键和值 int key = item.keys.first; dynamic value = item[key]; // 聚合值:存在则追加,不存在则新建列表 if (tempAggregate.containsKey(key)) { tempAggregate[key]!.add(value); } else { tempAggregate[key] = [value]; } } // 转换为期望的输出格式 List<Map<int, dynamic>> result = tempAggregate.entries.map((entry) { return {entry.key: entry.value}; }).toList(); // 打印结果 print(result); }
输出结果
运行后会得到:
[{1: [88550, 89887, 93297, 93297, 93297, 94863]}, {2: [95141, 95141, 110110]}]
如果需要对列表去重,可以修改值追加逻辑:
// 替换原追加代码 if (!tempAggregate[key]!.contains(value)) { tempAggregate[key]!.add(value); }
内容的提问来源于stack exchange,提问作者user21335679
相关产品推荐
相关产品推荐

