gpt4 book ai didi

c# - 如何从给定的父节点获取所有子节点?

转载 作者:太空狗 更新时间:2023-10-30 01:07:52 24 4
gpt4 key购买 nike

我有一个父/子 ID 列表,想获取给定父 ID 的所有子 ID。没有空的 parent (顶级 ID 不显示为子 ID)。

目前,父/子 ID 在列表中记录为 KeyValuePair,但是如果更好的话,这可以很容易地更改为另一种数据结构:

List<KeyValuePair<int, int>> groups = new List<KeyValuePair<int, int>>();
groups.Add(new KeyValuePair<int,int>(parentID, childID));

例如,这里是示例父/子。 parent 27 的 child 将是 5944、2065、2066、2067、6248、6249、6250

Parent  Child
27 1888
1888 5943
1888 5944
5943 2064
5943 2065
5943 2066
5943 2067
2064 6248
2064 6249
2064 6250

如有任何帮助,我们将不胜感激!

最佳答案

为什么不更改 Dictionary<int, List<int>> 的类型,其中父项是键,值(整数列表)是子项?

然后你会得到 child 的列表,使用:

    private List<int> GetAllChildren(int parent)
{
List<int> children = new List<int>();
PopulateChildren(parent, children);
return children;
}

private void PopulateChildren(int parent, List<int> children)
{
List<int> myChildren;
if (myitems.TryGetValue(parent, out myChildren))
{
children.AddRange(myChildren);
foreach (int child in myChildren)
{
PopulateChildren(child, children);
}
}
}

您需要权衡性能影响,因为这会加快读取速度并减慢写入速度(绝大多数情况下甚至没有人会注意到)。

您还需要使用 myitems.TryGet(...) 检查列表是否在字典中如果没有,您将需要创建它,但这是 o(1),所以几乎是即时的。

private static void AddEntry(int parent, int child)
{
List<int> children;
if (!myitems.TryGetValue(parent, out children))
{
children = new List<int>();
myitems[parent] = children;
}
children.Add(child);
}

关于c# - 如何从给定的父节点获取所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com