我有一个IList<Category>
类别类型来自我在 SQL Server 中的类别表:
表:类别
类别 ID、父类别 ID
如此典型的层次结构在一张桌子上。
因此,如果我有这个包含节点关系的类别 IList,那么我试图弄清楚这如何适合像很多人一样制作节点和树。构造函数的外观和创建这个类的使用情况如何?
我认为在这里创建一个通用的 Node 类和 Tree 类是有意义的,这样我可以在将来重用我认为的其他树类型。
所以如果我有这样的东西,T 是如何被使用的,我从中受益了什么?
(这里是伪代码)
public class Node<T>
...
Node<T> _parentNode;
List<Node<T>> _children;
private void SetParentNode(T)
private void AddChild(T)
... etc.
试图在这里理解关于为什么通用节点类将用于任何类型的概念,例如 Childeren 等,其中包含子/父关系(int Ids)
更新
因此,这里的 GroupBy 建议存在问题。看看我试图用你的例子做什么:
首先,我的 Tree 类中有这个属性:
公共字典,IList>> ParentNodeAndRelatedChildrenFlattenedMap { get; 私人套装;}
并且传入我的类的构造函数的是一个 IList 依赖项,我将它转换(循环并为它们中的每一个创建一个新节点)到 IList>
现在,我正在尝试按 Node.ParentId 对该列表进行分组,以便在父节点上进行分组,并且由于每个节点都有其子属性,因此很容易找出与这些父节点相关的子节点。
但这是我代码中的问题:
public void CreateFlattenedMap()
{
var parentGroups = _nodeDependencies.GroupBy(d => d.ParentNodeId);
var dictionary = parentGroups.ToDictionary(d => d, d => d.ToList());
ParentNodeAndRelatedChildrenFlattenedMap = dictionary;
}
好吧,它不喜欢我对字典的分配,因为它是由 ToDictionary() 创建的 > 字典。所以不知道如何将这个分组分组到一个字典中,List> 其中字典中的节点是我分组的父节点的节点实例(是的,我在它的 Node.ParentId 上分组,但我想要节点虽然在最后的 ToDictionary 中)并且 List> 是来自 Parent Node.Children 属性的子节点列表。