【发布时间】:2012-02-23 07:49:27
【问题描述】:
MyClass由IDParentID和List<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 中实现这一目标的最简单方法是什么?
P.S.: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);
如您所见,很多我不想要的项目仍在字典中
【问题讨论】:
-
输出应该是什么类型的数据结构?
-
@Jon: 请参考我更新的问题
-
但是
List不是分层数据结构。换句话说,你建议如何将List变成图中的树? -
@jon: 请参考我更新的问题,我可以通过简单的 foreach 语句将数据转回列表
-
我不确定我是否理解您的问题。你希望你的输出是什么?
标签: c# list linq-to-objects hierarchical-data