gpt4 book ai didi

C#通过递归获取层次列表

转载 作者:行者123 更新时间:2023-11-30 21:53:18 25 4
gpt4 key购买 nike

在我的 Azure 表中,我有一个树状结构。我想要实现的是获得这样的数据列表

var data = [{

item1 : {
name : "",
children : [] // list of children, if any children is a parent of other items get those
}
}]

这段代码是我写的

 List<dynamic> test = new List<dynamic>();
DisplayTree(NewMassType.GetAll().Where(e => e.ParentId == null), test);


public void DisplayTree(IEnumerable<NewMassType> elements, List<dynamic> test)
{
foreach (var element in elements)
{
test.Add(new
{
name = element.Name
});

var children = NewMassType.GetAll().Where(e => e.ParentId == element.Id);
if (children.Count() > 0)
{
DisplayTree(children,test);
}

}
}

它给了我一个简单的列表。期待建议。

最佳答案

为了构建层次结构,您需要将结果存储在层次结构中,而不是平面列表中。您的递归方法需要重新设计:

static List<dynamic> DisplayTree(IEnumerable<NewMassType> elements) {
var res = new List<dynamic>();
foreach (var element in elements) {
var children = DisplayTree(NewMassType.GetAll().Where(e => e.ParentId == element.Id)).ToArray();
if (children.Length != 0) {
res.Add(new {
name = element.Name
, children = children
})
} else {
res.Add(new {
name = element.Name
})
}
}
return res;
}

此代码与您的代码之间的主要区别在于,每次递归调用都会生成一个单独的列表,当它不为空时,该列表将添加到匿名类型的对象中。

关于C#通过递归获取层次列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com