我有这门课
class Node
{
public bool is_end;
public int prefix_count;
public Node[] child = new Node[26];
}
我的问题是,该类仅在必要时创建节点,但在程序的后期,我需要检查所有创建的节点,但由于我不知道创建了哪些节点,因此我不能为其使用循环.
有没有办法让我知道创建了哪些节点,是否有代码来检查这个节点是否存在。
我有这门课
class Node
{
public bool is_end;
public int prefix_count;
public Node[] child = new Node[26];
}
我的问题是,该类仅在必要时创建节点,但在程序的后期,我需要检查所有创建的节点,但由于我不知道创建了哪些节点,因此我不能为其使用循环.
有没有办法让我知道创建了哪些节点,是否有代码来检查这个节点是否存在。
尝试使用 aList<Node>
而不是固定长度的数组。然后你可以使用诸如
var nodeList = new List<Node>();
nodeList.Add(someRandomNode);
if (nodeList.Contains(someRandomNode))
{
// your logic
}
你也可以迭代你的Node
集合。
foreach(var node in nodeList) { }
在这种情况下,您的child
数组是预先创建的,但不会分配每个单独的节点。您可以检查null
是否Node
已创建 a:
bool ChildCreated(Node parent, int childIndex)
{
return parent.child[childIndex] != null;
}
我必须找出创建了哪些子节点,例如从 0 到 25 的循环,并且它必须给出一个消息,如 node[2] 和 node[11] 已创建,其他的则没有。
使用此方法,您可以轻松做到:
var created = Enumerable.Range(0, node.child.Length).Where(i => ChildCreated(node, i)).ToList();
if (!created.Any())
{
Console.WriteLine("No children created.");
}
else
{
Console.WriteLine("Children {0} created, all others aren't.", string.Join(", ", created));
}
您需要做的就是检查Node[]
元素是否为空:
int nodeIndex = 0;
if(child[nodeIndex] == null)
{
// node doesn't exist
}
else
{
// node exists
}