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

如何将路径列表高效转换为嵌套Map结构(Dart)

将路径列表转换为嵌套Map的高性能实现(Dart)

需求说明

输入路径列表:

[ 
  "animal/cat/persian", 
  "animal/cat/british_shorthair", 
  "animal/dog/pug", 
  "animal/dog/pitbull", 
  "vehicle/car/mercedes", 
  "vehicle/car/bmw"
]

需要转换为如下嵌套Map结构:

{ 
  'animal': {
        'cat': {
            'Persian': {}, 
            'British_Shorthair': {} 
        },
        'dog': {
            'Pug': {},
            'Pitbull': {}
        }
   },
  'vehicle': {
        'car': {
            'Mercedes': {},
            'BMW': {}
        }
}

要求路径长度不固定、支持无限嵌套,且实现需保证高性能。

实现思路

核心思路是遍历每个路径并逐步构建嵌套节点,复用已存在的Map对象避免重复创建,以此保证高性能:

  • 初始化空的根Map作为结果容器
  • 对每个路径按/分割为多个段
  • 从根Map开始,依次遍历每个路径段:
    • 将路径段转换为目标命名格式(下划线分隔转首字母大写的驼峰)
    • 检查当前Map是否存在该键对应的节点:存在则直接进入该节点;不存在则创建新的空Map并加入当前节点,再进入新节点
  • 处理完所有路径段后,得到完整嵌套Map

代码实现

Map<String, dynamic> buildNestedMap(List<String> paths) {
  final root = <String, dynamic>{};
  
  for (final path in paths) {
    final segments = path.split('/');
    var currentMap = root;
    
    for (var i = 0; i < segments.length; i++) {
      var segment = segments[i];
      // 转换命名格式:下划线分割后每个词首字母大写,再用下划线拼接
      final formattedKey = segment.split('_').map((word) => 
        word.isNotEmpty ? '${word[0].toUpperCase()}${word.substring(1)}' : ''
      ).join('_');
      
      // 不存在对应节点则创建新空Map
      if (!currentMap.containsKey(formattedKey)) {
        currentMap[formattedKey] = <String, dynamic>{};
      }
      // 移动到下一层节点
      currentMap = currentMap[formattedKey] as Map<String, dynamic>;
    }
  }
  
  return root;
}

// 使用示例
void main() {
  final paths = [
    "animal/cat/persian",
    "animal/cat/british_shorthair",
    "animal/dog/pug",
    "animal/dog/pitbull",
    "vehicle/car/mercedes",
    "vehicle/car/bmw"
  ];
  
  final nestedMap = buildNestedMap(paths);
  print(nestedMap);
}

性能说明

该实现时间复杂度为O(N),其中N是所有路径的总段数。每个路径段仅被处理一次,哈希表的节点创建和访问操作均为O(1),无冗余遍历或重复计算,能高效处理大量路径和深度嵌套场景。

内容的提问来源于stack exchange,提问作者Charitarth Chugh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:27:19