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

C#如何基于运行时可变表格数据动态创建分层Data对象

分层对象生成实现方案

输入示例数据

数据行列可在运行时动态增删,示例如下:

Column1   Column2  Column3
RED       Car      100
RED       Car      150
RED       Bike     140
BLUE      Car      240
BLUE      Bike     120

给定实体类定义

public class Data{
    public List<Data> ChildObjects;
    public string strName;
}

生成规则

  • 根对象strName固定为parent,子节点为Column1列的所有去重值
  • 每个Column1对应的节点下的子节点为Column2列的所有去重值
  • 所有Column2对应的节点,子节点为Column3列的全部数值集合

实现代码

首先建议补充Data类的默认构造逻辑,避免空引用异常,核心实现如下:

// 优化后的实体类,自动初始化子对象集合
public class Data
{
    public List<Data> ChildObjects { get; set; } = new List<Data>();
    public string strName { get; set; }
}

/// <summary>
/// 动态构建分层结构
/// </summary>
/// <param name="rawData">解析后的原始数据行集合</param>
/// <returns>分层结构根节点</returns>
public Data BuildHierarchy(List<(string Column1, string Column2, int Column3)> rawData)
{
    // 一次性提取所有需要的集合,避免重复遍历原始数据
    HashSet<string> colorDistinct = rawData.Select(item => item.Column1).ToHashSet();
    HashSet<string> typeDistinct = rawData.Select(item => item.Column2).ToHashSet();
    List<string> allValues = rawData.Select(item => item.Column3.ToString()).ToList();

    // 初始化根节点
    Data root = new Data { strName = "parent" };

    // 构建颜色层节点
    foreach (string color in colorDistinct)
    {
        Data colorNode = new Data { strName = color };
        root.ChildObjects.Add(colorNode);

        // 构建类型层节点
        foreach (string type in typeDistinct)
        {
            Data typeNode = new Data { strName = type };
            colorNode.ChildObjects.Add(typeNode);

            // 批量添加所有数值子节点
            typeNode.ChildObjects.AddRange(allValues.Select(val => new Data { strName = val }));
        }
    }

    return root;
}

逻辑说明

  • 所有集合提前一次性计算,没有冗余遍历,性能最优
  • 完全适配数据动态增删场景:新增的颜色、类型、数值会自动同步到最终结构中,不需要修改逻辑
  • 严格符合要求的层级结构:每个类型节点下都包含全部Column3的数值,没有按颜色分组过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:57:04