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

如何在C#中递归构建List<ABC>类型的多层级对象列表

构建递归层级List的解决方案

我来帮你搞定这个递归构建层级结构的问题!你已经能给子节点添加子对象,现在只需要调整逻辑,把整个树的根节点收集起来并正确组装即可。这里给你一套清晰的实现思路和代码:

核心思路

  1. 先建立数据映射:把所有数据条目转换成ABC对象,并用字典存储(键为Value,值为对应的ABC实例),这样能快速查找父节点。
  2. 区分根节点与子节点:遍历所有数据,Parent为空的就是根节点,直接加入结果列表;非根节点则找到对应的父节点,将自己添加到父节点的children列表中。
  3. 自动递归组装:因为每个ABC对象的children会被动态填充,当处理到深层子节点时,自然会嵌套到对应的父节点下,不需要额外写复杂的递归函数(后续有特殊逻辑可以再扩展)。

完整代码实现

// 先定义原始数据的承载类(模拟你给出的表格数据)
public class DataItem
{
    public string Parent { get; set; }
    public string Value { get; set; }
}

public List<ABC> BuildHierarchicalList(List<DataItem> dataItems)
{
    // 用字典存储Value到ABC对象的映射,快速查找父节点
    var valueToAbcMap = new Dictionary<string, ABC>();
    var rootNodes = new List<ABC>();

    foreach (var item in dataItems)
    {
        // 获取或创建当前Value对应的ABC实例
        if (!valueToAbcMap.TryGetValue(item.Value, out var currentAbc))
        {
            currentAbc = new ABC
            {
                value = item.Value,
                children = new List<ABC>() // 初始化children列表,避免空引用异常
            };
            valueToAbcMap[item.Value] = currentAbc;
        }

        // 处理根节点(Parent为空/空字符串)
        if (string.IsNullOrEmpty(item.Parent))
        {
            rootNodes.Add(currentAbc);
        }
        else
        {
            // 找到父节点实例,将当前节点加入其children列表
            if (valueToAbcMap.TryGetValue(item.Parent, out var parentAbc))
            {
                parentAbc.children.Add(currentAbc);
            }
            // 可选:这里可以添加父节点不存在时的异常处理或日志
        }
    }

    return rootNodes;
}

代码关键说明

  • 字典映射:valueToAbcMap确保每个Value只对应一个ABC对象,既避免重复创建,又让父节点查找的时间复杂度降到O(1),效率很高。
  • children初始化:每个ABC对象创建时都初始化children列表,后续添加子节点时不会出现NullReferenceException。
  • 自动嵌套逻辑:当处理C(Parent是A)时,会找到之前创建的A的ABC实例,把C加入它的children;同理D会加入B的children,最终自动形成你想要的多层嵌套结构。

测试用例

把你给出的表格数据转换成List<DataItem>,调用方法就能得到目标结果:

var data = new List<DataItem>
{
    new DataItem { Parent = "", Value = "1" },
    new DataItem { Parent = "1", Value = "A" },
    new DataItem { Parent = "A", Value = "C" },
    new DataItem { Parent = "", Value = "2" },
    new DataItem { Parent = "2", Value = "B" },
    new DataItem { Parent = "B", Value = "D" },
};

var result = BuildHierarchicalList(data);

返回的result就是你想要的List<ABC>结构,序列化成JSON后和你给出的示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:34:08