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

如何合并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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:57:34