我有以下课程:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public List<Parent> Children { get; set; }
}
从父母那里我可以有多个孩子,每个孩子都可以有更多的孩子等等。
现在我的目标是以分层形式填充此对象/列表。我从顶部开始并慢慢添加到它上面以便分支出来,但是我有一个问题。如何找到并向特定孩子添加项目?
编辑: 已经提供了几种方法来查找该节点并添加到该节点。但问题仍然存在:
考虑一下:我有一个已经有几个孩子的父母。我将使用Find方法查找其中一个子项,并使用返回Child的方法。现在我需要在父母身上为孩子添加一个新孩子。当我使用你的代码时,它将Child添加到Child中,方法Find返回,但它不会影响我原来的Parent。当我想要让我新添加的孩子时,该父母的孩子名单仍为0。
抽出示例:这是我已经拥有的列表
- Mary
- Peter
- Jake
- Luke
在这个例子中,玛丽有两个孩子,彼得和卢克。彼得有个孩子,杰克。我的目标是找到杰克,并为杰克增添一个孩子。我可以通过使用递归搜索来完成此操作,这将成功返回Jake。我可以给杰克添加一个孩子(约翰),这将留给我这个:
- Jake
- John
但是我需要修改原始父母,以便我有:
- Mary
- Peter
- Jake
- John
- Luke
答案 0 :(得分:1)
您需要在树中递归搜索您的节点:
[{"id":"aaa","map1count":"1","map2count":"2","map3count":"0"},
{"id":"bbb","map1count":"1","map2count":"0","map3count":"0"},
{"id":"ccc","map1count":"1","map2count":"0","map3count":"6"},
{"id":"ddd","map1count":"0","map2count":"0","map3count":"6"}]
用法示例(public static Parent FindNode(int id, Parent current)
{
if (current.Id == id)
{
return current;
}
foreach (var child in current.Children)
{
var ret = FindNode(id, child);
if (ret != null)
{
return ret;
}
}
return null;
}
表示树的根节点):
root
答案 1 :(得分:0)
你必须编写一个递归函数来完成它。您将首先获得最顶级Parent的子项,然后将子项作为参数传递给下面的函数&#34; GetParendetails&#34;
public Parent GetDetails()
{
//the following code should be replaced by the code to get Top parent details from your db or whatever. pass the children of this class to the below function
Parent P=new Parent();
P.Id=1;
p.Name="Top";
P.Children=new List<Parent>();
P.Children.Add(new Parent(2,"test1"));
P.Children.Add(new Parent(2,"test2"));
P.Children.Add(new Parent(2,"test3"));
P.Children=GetParendetails(P.Children);
}
public List<Parent> GetParendetails(List<Parent> PL)
{
if(PL!=null)
{
foreach(Parent P in PL)
{
List<Parent> childlist=new List<Parent>();
//logic to get children of P and adding them to childlist
P.Children=GetParendetails(childlist);
}
}
return PL;
}
答案 2 :(得分:0)
您的项目应包含ParentId
属性,然后您可以使用LINQ构建树
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public List<Parent> Children { get; set; }
}
要构建树,只需使用LINQ
public IEnumerable<Item> BuildTree( IEnumerable<Item> source )
{
// build the children list for each item
foreach ( var item in source )
{
item.Children = source.Where( i => i.ParentId == i.Id ).Tolist();
}
// return only the root parents
return source.Where( i => i.ParentId == 0 ).ToList();
}