【发布时间】:2012-12-06 23:04:16
【问题描述】:
我希望访问和编辑以下树结构,但在互联网上找不到好方法。
class SimpleNode
{
string Name;
SimpleType Type;
List<SimpleList> Children;
}
class SimpleList
{
//some list-based properties
List<SimpleNode> Items;
}
我需要能够查找和编辑节点而不求助于:
Node.Children[0].Items[0].Children[1].Items[3]
之类的。我通过返回树元素的函数尝试了此操作,但编辑返回的元素似乎不会影响实际的树。更复杂的是,我不想排除两个相同的节点存在于树中的不同点。
很明显,这是我第一次使用树形结构,确实需要一些帮助。
经过进一步调查(根据 Drew),复合模式概念是有意义的,尤其是方法转发/聚合返回概念。这里的技巧是我可能在树中的两个不同点有两个具有相同标识符(类型和名称)的节点。
不起作用的代码类似于(早已不复存在):
Node GetNode(Type type, string name)
{ // returns node }
我尝试了类似的方法:
Node nodeToEdit = GetNode(params);
nodeToEdit.Name = "New Name";
或
nodeToEdit.Children.Add(new Node());
但它似乎没有吸收树。如果应该有,请告诉我,因为我一定错过了什么。
【问题讨论】:
-
元素是类还是结构?
-
您能否详细说明“编辑”的含义?你到底需要做什么?
-
这被称为Composite Pattern。我建议您阅读它,然后扩展您的问题。
-
如果您想通过键查找和编辑值,为什么不使用
Dictionary、SortedDictionary或SortedSet? -
@DrewNoakes:通过编辑,我的意思是我想更改节点和列表的名称或其他属性。我还将查找复合模式。谢谢你不给我打折。当我有更多信息时会编辑。