【发布时间】:2013-04-07 20:32:58
【问题描述】:
我有一个类,它有一个自身的列表,因此可以用树结构表示。
我正在提取这些类的平面列表,并希望将其展开。
public class Group
{
public int ID {get;set;}
public int? ParentID {get;set;}
public List<Group> Children {get;set;}
}
我希望能够做到以下几点
List<Group> flatList = GetFlatList() //I CAN ALREADY DO THIS
List<Group> tree = BuildTree(flatList);
ParentID 与其父组上的 ID 属性相关,如果这不明显的话。
编辑
对于我返回列表而不是单个对象的原因有些困惑。
我正在构建一个包含项目列表的 UI 元素,每个项目都有一个子项。所以初始列表没有根节点。到目前为止,似乎所有解决方案都不起作用。
这意味着我本质上需要一个使用 Group 类的树型结构列表。
【问题讨论】:
-
该平面列表是否以任何方式排序?就像,父母总是出现在它的任何孩子之前,你能保证这样的顺序吗?或者你可能会在父母之前得到孩子?
-
使用
Dictionary<int, Group>将 id 映射到Groups,然后使用它来查找要将项目添加到哪个父级。除了树是递归数据结构这一事实之外,这也绝不涉及递归。 -
flatList的类型是什么?那里的var没有给我们太多信息。 -
我在上面做了一些修改。顺序无关紧要。