c# - 获取按级别排序的父级的所有子级
问题描述
我有这张按级别排序的表
name parentId id level
Dep 1 0 1 0
Dep 2 1 2 1
Dep 6 2 6 2
Dep 4 1 4 1
Dep 5 4 5 2
Dep 3 0 3 0
让父母的所有孩子的最佳方法是什么?我想过使用字典来存储所有的 id,然后创建一个递归函数来搜索每个父母的所有孩子。但是由于它已经按级别排序,我真的需要一个递归函数还是人工智能可以以迭代的方式来完成它?
预期结果:
[
{
"id" : "1",
"name" : "Dep1",
"children": [
{
"id" : "2",
"name" : "Dep2",
"children": [
{
"id" : "6",
"name" : "Dep6"
}
]
}
]
"id" : "4",
"name" : "Dep4",
"children": [
{
"id" : "5",
"name" : "Dep5"
}
]
{
"id" : "3",
"name" : "Dep3"
}
}
]
解决方案
我会采取这种方法:
List<Data> data = new List<Data>()
{
new Data() { Name = "Dep 1", ParentId = 0, Id = 1, Level = 0 },
new Data() { Name = "Dep 2", ParentId = 1, Id = 2, Level = 1 },
new Data() { Name = "Dep 6", ParentId = 2, Id = 6, Level = 2 },
new Data() { Name = "Dep 4", ParentId = 1, Id = 4, Level = 1 },
new Data() { Name = "Dep 5", ParentId = 4, Id = 5, Level = 2 },
new Data() { Name = "Dep 3", ParentId = 0, Id = 3, Level = 0 },
};
var lookup = data.ToLookup(x => x.ParentId);
List<Result> GetChildren(int parentId) =>
lookup[parentId]
.Select(c => new Result()
{
Id = c.Id,
Name = c.Name,
Children = GetChildren(c.Id)
})
.ToList();
List<Result> result = GetChildren(0);
这给出了:
[ { “身份证”:1, "名称": "Dep 1", “孩子们”: [ { “身份证”:2, "名称": "Dep 2", “孩子们”: [ { “身份证”:6, "名称": "Dep 6", “孩子们”: [] } ] }, { “身份证”:4, “名称”:“Dep 4”, “孩子们”: [ { “身份证”:5, "名称": "Dep 5", “孩子们”: [] } ] } ] }, { “身份证”:3, "名称": "Dep 3", “孩子们”: [] } ]
我同意这需要在大型数据集上进行测试,以查看它是否具有内存或计算限制。
推荐阅读
- windows - 使用PowerShell在Windows 10中卸载软件包(第三方防病毒)
- .net - 为导入的包选择特定的框架
- github-actions - 在自定义 Github Action 中访问 Github 环境变量
- email - 自动联系网页所有者/作者(通过联系我们页面或电子邮件地址)
- javascript - JQuery 将复选框附加到表单
- c# - 实体框架的 LINQ 实现不合适吗?
- python-3.x - 在 ArcGIS Online 中过滤文件夹和项目类型
- java - 随着应用程序主题的变化,圆形按钮停止工作
- javascript - Vue - 用标签动态包围组件
- python - 睡眠 while 循环而不中断它,用于在 tkinter 中写入新条目