【发布时间】:2020-05-15 11:08:15
【问题描述】:
我的项目中有一个树形菜单。
数据如下所示
{ParentId = null, Id = 10, Name "a"},
{ParentId = null, Id = 33, Name "aa"},
{ParentId = 10 , Id = 11, Name "aaa"},
{ParentId = 10, Id = 12, Name "aaaa"},
{ParentId = 11, Id = 13, Name "aaaaa"},
{ParentId = 56 ,Id = 14, Name "aas"},
{ParentId = 78 , Id = 15, Name "adss"},
{ParentId = 99 , Id = 16, Name "ader"}
我已经创建了一个分层列表来保存数据
public class NavBarItem
{
public int? Id { get; set; }
public int? ParentId { get; set; }
public string Name{get;set;}
public IEnumerable<NavBarItem> Children { get; set; }
public int ChildCount { get; set; }
public int HierarchyLevel { get; set; }
}
而我的递归方法将从表中获取数据并将其绑定到层次列表
我想在这里得到的是每个父母的子女/孙子女总数。
例如 Parent A 有 child B 并且 Child B 有 Child C & D,那么 A 的总 ChildCount 应该是 3 , B 应该是 2 并且 C 应该是 0
我还想获得每个父母的层次结构级别。
在上面的示例中:父母 A 有孩子 B,而 B 有另一个孩子。所以对于父 A,hierarchyLevel 是 2,对于 B,它应该是 1,对于 C,它应该是 0
例如,如果我使用 Id = 10 的项目,它有层次结构二(孙级别的数量)
{ParentId = 10 , Id = 11, Name "aaa"},
{ParentId = 11, Id = 13, Name "aaaaa"},
有没有更好的方法,或者简单的方法我可以获得这个 ChildCount 以及 Hierarchy 级别。
儿童总数示例:
Input is Id = 10
total childs = 3.
目前的做法:
RecursiveMethod(List)
{
for each through the list and find the count
call the RecursiveMethod again
}
【问题讨论】:
-
到目前为止您尝试了哪些方法,您的代码遇到了哪些问题?
-
@PavelAnikhouski 我创建了另一种递归方法来完成它。寻找更好的选择。而不是递归方法。可能是一个很好的语法(即使它在高层执行相同的递归)
-
为什么不在
NavBarItem上创建一个递归返回该节点的子节点数的方法? -
@Knoop 你在 NavbarItem 中创建方法是什么意思?您的意思是由该类的构造函数调用的方法?
-
嗯,你实际上想要完成什么有点不清楚,所以很难给出一个好的答案。但你也许可以这样做:dotnetfiddle.net/G9rbFv。无论您是想从构造函数还是其他我不知道的地方调用它,您都没有足够的共享来了解正在发生的事情以及您想要什么。