【发布时间】:2013-03-29 05:23:47
【问题描述】:
我有一个IList<Category>
类别类型来自我在 SQL Server 中的类别表:
表格:类别
CategoryID、ParentCategoryID
一张表中的典型层次结构。
因此,如果我有这个包含节点关系的类别 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 对该列表进行分组,以便在父节点上进行分组,并且由于每个节点都有其 children 属性,因此很容易找出与这些父节点相关的子节点节点。
但现在我的代码中出现了问题:
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 属性的子节点列表。
【问题讨论】: