【问题标题】:Collections for hierarchies层次结构的集合
【发布时间】:2009-04-14 18:39:28
【问题描述】:

在我正在编写的应用程序中,我试图找到一种有效存储层次结构的方法。这是example

在底部,您可以看到要存储的节点。我应该使用多维列表吗?这似乎不是很理想,对吧?我在想像这样持有参考资料:

node.Parent
node.Children { collection }

有没有人用过这种东西?

【问题讨论】:

    标签: c# .net collections


    【解决方案1】:

    这是一个相当基本的树实现,是的。如果选择为孩子创建 IList 或 IEnumable 或 ArrayList 等集合,则由您决定。

    我强烈建议您构建一个通用实现,而不是一个类型化到您的域模型的实现,但这取决于您。

    【讨论】:

    • 谢谢,在你的第二段中,你的意思是写一个通用的 CustomCollection
    • 不,更像 Treenode,它包含 TreeNode Parent 和 IEnumerable> Children
    • 请注意,正如 Lucero 在下面的帖子中提到的,它仅适用于所有对象的类型或抽象相同的情况。
    • 谢谢,喜欢 Node : BaseNode, Node Parent, IEnumerable Children ?如果我这样做,家长/孩子会放弃实际班级吗?
    • 有两个泛型类型参数,一个用于分支,一个用于叶子。
    【解决方案2】:

    是的。你有正确的想法。如果您需要双向层次结构,我不会使用多维列表...我会在树中添加一个节点,每个节点都包含一个父节点和一组子节点。

    你在正确的轨道上。

    【讨论】:

      【解决方案3】:

      如果不是所有项目都属于同一类型,在这种情况下,我可以为链表和子集合使用抽象基类。

      【讨论】:

      • 谢谢,喜欢 Node : BaseNode, Node Parent, IEnumerable Children ?如果我这样做,家长/孩子会放弃实际班级吗?
      • 我们,我猜孩子可能是不同类型的。但是,如果需要,使用泛型实际上可以有一个强类型的父级。但通常你只是在这种模式中使用基类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2019-09-13
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多