1

次のようにリストを設定して、逆の順序で検索して操作 (アイテムを削除) したいのですが、これを行う良い方法がわかりません。

現在、リストは ですが、Observable Collection別のタイプに変更できます。

再帰を使用してリストを下方向に検索することはできますが、上方向に検索するにはどうすればよいでしょうか (子から始めて上に向かって)。

ID、ListOfChildren <>、名前

例えば:

ID: 1, ListOfChildren Count = 2, Name = "Room 1"<br>
--- ID 10, ListOfChildren, Count = 0, Name = "Bed 1.1"<br>
--- ID 11, ListOfChildren, Count = 0, Name = "Bed 1.2"<br>

ID: 2, ListOfChildren Count = 2, Name = "Room 2"<br>
--- ID 12, ListOfChildren, Count = 0, Name = "Bed 2.1"<br>
--- ID 13, ListOfChildren, Count = 0, Name = "Bed 2.2"<br>

ID: 3, ListOfChildren Count = 2, Name = "Room 3"<br>
--- ID 14, ListOfChildren, Count = 0, Name = "Bed 3.1"<br>
--- ID 15, ListOfChildren, Count = 0, Name = "Bed 3.2"<br>

ありがとう、ビル

4

1 に答える 1

0

順序検索の反対を行うことができ、子を削除する必要があるかどうかをメソッドに返すことができます。実際には逆になるように順序を書き直しました。または、子の親への参照を追加します。はい、追加のメモリが必要です。そのため、ほとんどの場合、ツリーをトラバースする必要があります。

public class Tree
{
    private static Random rand = new Random();
    public List<Tree> Children = new List<Tree>();

    public Tree Parent;

    public string Name;

    public Tree(Tree parent)
    {
        Parent = parent;
        Name = rand.Next(10000).ToString();
    }

    // Removing without tree traversal.
    public void DeleteParent()
    {
        this.Parent.Parent.Children.Remove(this.Parent);
    }

    public bool Remove(string name)
    {
        for(int i = Children.Count - 1; i >= 0; i--)
        {
            if (Children[i].Remove(name))
            {
                // Use a for-loop with index to remove the child right away.
                Children.Remove(Children[i]);
                // Extra remove handling
                i--;
            }
        }

        // Remove condition.
        return this.Name.Contains(name);
    }
}

これが起こる順序は重要ですか?親を削除すると、すべての子がメモリ管理によって削除されます。

于 2013-07-28T17:39:47.553 に答える