// 将平铺数组解析成树结构的方法
public static List<ContractCheckList> ParseArrayToTree(IEnumerable<dynamic> flatArray)
{
// 创建一个字典来存储节点,以便根据ID快速查找
Dictionary<string, ContractCheckList> nodeLookup = new Dictionary<string, ContractCheckList>();
// 第一遍遍历:创建节点并添加到字典中
foreach (var item in flatArray)
{
nodeLookup[item.NodeId] = item;
}
// 第二遍遍历:构建父子关系
List<ContractCheckList> rootNodes = new List<ContractCheckList>();
foreach (var item in flatArray)
{
ContractCheckList node = nodeLookup[item.NodeId];
if (node.ParentId == null)
{
// 没有ParentId,表示这是根节点
rootNodes.Add(node);
}
else
{
// 有ParentId,找到父节点并添加到其子节点列表中
if (nodeLookup.ContainsKey(node.ParentId))
{
nodeLookup[node.ParentId].Children.Add(node);
}
}
}
return rootNodes;
}