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

如何通过路径数组构建多层Person树形结构?

路径数组转多层Person树形结构解决方案

问题核心

你需要将分隔符分割的路径数组,转换为Person类的多层树形结构,原代码的主要问题是新建节点未添加到父节点的Children集合,导致树形结构无法正确嵌套。

修复后完整代码

public class Person
{
    public string Name { get; set; }
    public string FullPath { get; set; }
    public List<Person> Children { get; set; }
}

// 构建树形结构的逻辑
string[] list =
{
    "Parent1/Child1/SuperChild1/SupersuperChild1",
    "Parent1/Child1/SuperChild1/SupersuperChild2",
    "Parent2/Child2/SuperChild2/SupersuperChild3",
    "Parent2/Child3/SuperChild3/SupersuperChild4",
    "Parent2/Child3/SuperChild3/SupersuperChild5"
};

var rootNodes = new List<Person>();

foreach (var path in list)
{
    // 清理路径并分割为节点名称数组,去除空条目
    var nodeNames = path.Replace("[", "").Replace("]", "/").Split('/', StringSplitOptions.RemoveEmptyEntries);
    var currentLevelNodes = rootNodes;

    foreach (var nodeName in nodeNames)
    {
        // 查找当前层级是否已有同名节点
        var targetNode = currentLevelNodes.FirstOrDefault(n => n.Name == nodeName);
        
        if (targetNode == null)
        {
            // 创建新节点,仅叶子节点赋值FullPath
            targetNode = new Person
            {
                Name = nodeName,
                FullPath = nodeName == nodeNames.Last() ? path : null,
                Children = new List<Person>()
            };
            // 将新节点加入当前层级的集合(根集合或父节点的Children)
            currentLevelNodes.Add(targetNode);
        }

        // 切换到下一层级:当前节点的Children作为下一轮的操作集合
        currentLevelNodes = targetNode.Children;
    }
}

关键改进点

  1. 层级跟踪优化:用currentLevelNodes变量跟踪当前操作的节点集合(根节点列表或父节点的Children),避免重复从根节点查找,提升效率。
  2. 节点添加逻辑:新建节点时必须加入到当前层级的集合中,这是原代码缺失的核心步骤,确保节点能正确嵌套到树形结构里。
  3. 空值防护:添加StringSplitOptions.RemoveEmptyEntries处理分割后可能出现的空字符串,避免创建无效节点。
  4. 简化判断逻辑:统一先查找再创建的流程,替代原代码多分支的if-else,代码更易读和维护。

验证效果

运行代码后,rootNodes会包含Parent1和Parent2两个根节点,每个节点的Children层级完全匹配路径结构,叶子节点的FullPath会被正确赋值为完整路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:35:18