2

私はこのクラスを持っています

class Node
{
    public bool is_end;
    public int prefix_count;
    public Node[] child = new Node[26];
}

私の問題は、クラスが必要な場合にのみノードを作成することですが、プログラムの後半で、作成されたすべてのノードを確認する必要がありますが、作成されたノードがわからないため、サイクルを使用できません.

どのノードが作成されたかを知る方法はありますか?このノードが存在するかどうかを確認するコードはありますか?

4

3 に答える 3

4

List<Node>固定長配列の代わりに aを使用してみてください。次に、次のような方法を使用できます

var nodeList = new List<Node>();
nodeList.Add(someRandomNode);
if (nodeList.Contains(someRandomNode)) 
{
    // your logic
}

コレクションを繰り返し処理することもできますNode

foreach(var node in nodeList) { }
于 2013-03-15T17:36:32.007 に答える
3

この場合、childアレイは事前に作成されていますが、個々のノードは割り当てられていません。が作成されているnullかどうかを確認できます。Node

bool ChildCreated(Node parent, int childIndex)
{
    return parent.child[childIndex] != null;
}

たとえば、0 から 25 までのサイクルなど、どの子ノードが作成されるかを調べる必要があり、ノード [2] とノード [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));
}
于 2013-03-15T17:34:52.740 に答える
1

Node[]要素が nullかどうかを確認するだけです。

int nodeIndex = 0;
if(child[nodeIndex] == null)
{
    // node doesn't exist
}
else
{
    // node exists
}
于 2013-03-15T17:34:22.890 に答える