我有两种方法从平面列表返回动态层次结构。第一个很好的使用递归方法:(ID/ParentID) list to Hierarchical list。c#构建层次结构
我现在正在尝试做同样的事情,除了这次只显示那些具有保存报告输出的类别和报告。我不确定从哪里开始,因为我发现的所有内容都是从根部开始构建的,我需要从下往上。
我得到这样的事情,现在在我的第一种方法:
Category 1
|_Sub Category 1
|_Report 1
|_Report 2
|_Saved Output
Category 2
|_Sub Category 2
| |_Report 3
| |_Report 4
|_Sub Category 3
|_Report 5
|_Report 6
|_Saved Output
Category 3
|_Sub Category 4
|_Report 7
我想在我的第二个方法是这样的:
Category 1
|_Sub Category 1
|_Report 2
|_Saved Output
Category 2
|_Sub Category 3
|_Report 6
|_Saved Output
这里是我的基本测试结构:
class Flat
{
public int id { get; set; }
public int parentId { get; set; }
public string name { get; set; }
public bool isOutput { get; set; }
public Flat(int i, int pid, string n, bool o)
{
this.id = i;
this.parentId = pid;
this.name = n;
this.isOutput = o;
}
}
class MyClass
{
public int id { get; set; }
public int parentId { get; set; }
public string name { get; set; }
public bool isOutput { get; set; }
public List<MyClass> children { get; set; }
public MyClass()
{
this.children = new List<MyClass>();
}
}
List<Flat> items = new List<Flat>()
{
new Flat(1,0,"Category 1",false),
new Flat(4,1,"Sub Category 1",false),
new Flat(8,4,"Report 1",false),
new Flat(9,4,"Report 2",false),
new Flat(15,9,"Saved Output",true),
new Flat(2,0,"Category 2",false),
new Flat(5,2,"Sub Category 2",false),
new Flat(10,5,"Report 3",false),
new Flat(11,5,"Report 4",false),
new Flat(6,2,"Sub Category 3",false),
new Flat(12,6,"Report 5",false),
new Flat(13,6,"Report 6",false),
new Flat(16,13,"Saved Output",true),
new Flat(3,0,"Category 3",false),
new Flat(7,3,"Sub Category 4",false),
new Flat(14,7,"Report 7",false)
};
那么,如果你不是超级担心效率,只需构建整棵树,然后删除不完整的元素。除非要删除的部分是*巨大*,这不应该是一个问题。 – Servy
仅用于可视化的层次结构?在这种情况下@mellamokb有以下方法。如果您还需要获取结构,则可以将其扩展为Tree而不是List。 –
仅供参考在这个问题上你接受的答案比你想要的要复杂得多。使用两行简短的代码可以更高效地完成相同的结果。 – JLRishe