gpt4 book ai didi

c# - (ID/ParentID) 列表到分层列表

转载 作者:可可西里 更新时间:2023-11-01 08:13:56 26 4
gpt4 key购买 nike

MyClassID 组成ParentIDList<MyClass>作为Children

我有 MyClass 的列表像这样

ID  ParentID
1 0
2 7
3 1
4 5
5 1
6 2
7 1
8 6
9 0
10 9

输出(分层列表)为 List<MyClass>

1 __ 3
|__ 5__ 4
|__ 7__ 2__ 6__ 8
|__ 11

9 __10

在 linq 中实现这一点的最简单方法是什么?
附:ParentID未排序

编辑:
我的尝试:

class MyClass
{
public int ID;
public int ParentID;
public List<MyClass> Children = new List<MyClass>();
public MyClass(int id, int parent_id)
{
ID = id;
ParentID = parent_id;
}
}

初始化样本数据并尝试到达分层数据

 List<MyClass> items = new List<MyClass>()
{
new MyClass(1, 0),
new MyClass(2, 7),
new MyClass(3, 1),
new MyClass(4, 5),
new MyClass(5, 1),
new MyClass(6, 2),
new MyClass(7,1),
new MyClass(8, 6),
new MyClass(9, 0),
new MyClass(10, 9),
new MyClass(11, 7),
};

Dictionary<int, MyClass> dic = items.ToDictionary(ee => ee.ID);

foreach (var c in items)
if (dic.ContainsKey(c.ParentID))
dic[c.ParentID].Children.Add(c);

如你所见,字典里还有很多我不想要的条目

最佳答案

如果您在过滤之前建立父子关系,则此处不需要递归。由于列表的成员保持相同的对象,只要您将列表的每个成员与其直接子项相关联,就会建立所有必要的关系。

这可以分两行完成:

items.ForEach(item => item.Children = items.Where(child => child.ParentID == item.ID)
.ToList());
List<MyClass> topItems = items.Where(item => item.ParentID == 0).ToList();

关于c# - (ID/ParentID) 列表到分层列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9409021/

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