如何合并Map中的列表值并生成指定结构的嵌套Map
实现方案
首先需要说明:你给出的预期结果存在输入不匹配问题:原始map1中Second对应的列表仅包含'A'、'B'两个值,不存在'C',同时缺失了First列表中'4'对应的组合。以下实现基于「两个列表做笛卡尔积拼接key、每个key对应固定值子Map」的核心逻辑编写,你可以根据实际业务规则增加过滤/自定义映射逻辑。
以下以Dart语言为例(泛型写法和你给出的类型声明完全匹配):
- 核心逻辑:双层遍历两个列表,将两个列表的元素逐一枚举组合,拼接为新Map的key,给每个key赋值固定的
Map<String,int>类型值即可 - 扩展点:如果需要实现你示例中类似
3C、跳过部分组合的特殊规则,只需要在拼接key后增加判断分支,不需要改动整体遍历框架
void main() { // 原始输入Map final Map<String, List<String>> map1 = { 'First': ['1', '2', '3', '4'], 'Second': ['A', 'B'] }; // 初始化结果存储 final Map<String, Map<String, int>> result = {}; // 取出两个目标列表,增加空兜底避免运行时报错 final firstList = map1['First'] ?? []; final secondList = map1['Second'] ?? []; // 双层遍历生成所有组合 for (final item1 in firstList) { for (final item2 in secondList) { final combineKey = '$item1$item2'; // 此处可加自定义规则,比如你示例中的特殊逻辑可以参考下面注释的写法 // if (combineKey == '4A' || combineKey == '4B') continue; // 跳过不需要的key // if (item1 == '3' && item2 == 'B') { // result['3C'] = {'String1': 10, 'String2': 20}; // continue; // } result[combineKey] = { 'String1': 10, 'String2': 20 }; } } // 无自定义规则时的输出: // {1A: {String1: 10, String2: 20}, 1B: {String1: 10, String2: 20}, 2A: {String1: 10, String2: 20}, 2B: {String1: 10, String2: 20}, 3A: {String1: 10, String2: 20}, 3B: {String1: 10, String2: 20}, 4A: {String1: 10, String2: 20}, 4B: {String1: 10, String2: 20}} print(result); }
该逻辑是通用的,如果你使用的是Java/JavaScript等其他语言,只需要替换对应语言的Map、循环语法即可,核心的笛卡尔积遍历+key拼接逻辑不需要改动。
内容的提问来源于stack exchange,提问作者user17735849
相关产品推荐
相关产品推荐

