Frage

Kann mir jemand zeigen, wie eine rekursive Lambda-Ausdruck implementieren eine Baumstruktur in C # zu durchqueren.

War es hilfreich?

Lösung

Ok, fand ich etwas freie Zeit endlich.
Los geht's:

class TreeNode
{
    public string Value { get; set;}
    public List<TreeNode> Nodes { get; set;}


    public TreeNode()
    {
        Nodes = new List<TreeNode>();
    }
}

Action<TreeNode> traverse = null;

traverse = (n) => { Console.WriteLine(n.Value); n.Nodes.ForEach(traverse);};

var root = new TreeNode { Value = "Root" };
root.Nodes.Add(new TreeNode { Value = "ChildA"} );
root.Nodes[0].Nodes.Add(new TreeNode { Value = "ChildA1" });
root.Nodes[0].Nodes.Add(new TreeNode { Value = "ChildA2" });
root.Nodes.Add(new TreeNode { Value = "ChildB"} );
root.Nodes[1].Nodes.Add(new TreeNode { Value = "ChildB1" });
root.Nodes[1].Nodes.Add(new TreeNode { Value = "ChildB2" });

traverse(root);

Andere Tipps

Unter der Annahme ein mythisches Objekt TreeItem, die eine Kind Sammlung conatins Hierarchie darzustellen.

    public void HandleTreeItems(Action<TreeItem> item, TreeItem parent)
    {
        if (parent.Children.Count > 0)
        {
            foreach (TreeItem ti in parent.Children)
            {
                HandleTreeItems(item, ti);
            }
        }

        item(parent);
    }

Jetzt ist es zu nennen, in dem Lambda vorbei, die ein Element behandelt, durch Druck seinen Namen an die Konsole.

HandleTreeItems(item => { Console.WriteLine(item.Name); }, TreeItemRoot);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top