gpt4 book ai didi

c# - 在 C# 中创建树结构的紧凑语法

转载 作者:行者123 更新时间:2023-11-30 13:36:27 24 4
gpt4 key购买 nike

我想以简洁的方式在代码中创建一个有点复杂的树结构。现在我正在使用这个(简化):

var root = new Tree();
var c1 = root.Add("1");
var c2 = root.Add("2");
var c21 = c2.Add("2-1");
var c22 = c2.Add("2-2");
//...

平均节点宽度为4,树高约为5,所以上述过程非常繁琐,更何况可维护性差。

让我们假设以后不按名称访问节点。可以根据需要调整树/节点类。性能可以忽略不计。无法通过 XML 或类似方式创建(节点构造器在现实中要复杂得多)。

我正在寻找的是类似于以下内容的内容,但我不确定如何在 C# 中实现它。在 Java 中,这可以通过匿名类实现,而在 C# 中不能用于此目的。

var root = new Tree() {
Add("1");
Add("2") {
Add("2-1");
Add("2-2");
};
}

我能想到的最好的解决方案是使用类似于下面的连续声明,我认为它很难维护:

// AddXxx returns the added node
var root = new Tree()
.Add("1")
.AddSibling("2")
.Add("2-1")
.AddSibling("2-2")
.AddParent("3")
.Add("3-1")

或者:

// Add now always adds a sibling, Children/Parent steps up/down in the hierarchy
var root = new Tree()
.Children
.Add("1")
.Add("2")
.Children
.Add("2-1")
.Add("2-2")
.Parent
.Add("3")
.Children
.Add("3-1")

最佳答案

我会做这样的事情:

public class Tree
{
public string Name { get; private set; }
public List<Tree> Trees { get; private set; }

public Tree(string name)
{
this.Name = name;
this.Trees = new List<Tree>();
}

public Tree(string name, params Tree[] nodes)
: this(name)
{
if (nodes == null || !nodes.Any()) return;
Trees.AddRange(nodes);
}
}

然后像这样使用它:

var trees = new List<Tree>
{
new Tree("1"),
new Tree("2",
new Tree("2-1"),
new Tree("2-2",
new Tree("2-2-1"),
new Tree("2-2-1")
)
),
new Tree("3",
new Tree("3-1")
)
};

我的灵感来自 XElement有助于创建具有更高可读性的 XML 节点的构造函数。如果您正在使用 XML,那么我建议使用该类。

关于c# - 在 C# 中创建树结构的紧凑语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33713647/

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