Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Example of it in use:
- Node topNode = new Node()
- {
- Value = "Top",
- Children = new List<Node>()
- {
- new Node()
- {
- Value = "A",
- Children = new List<Node>()
- {
- new Node()
- {
- Value = "AA",
- },
- new Node()
- {
- Value = "AB",
- },
- new Node()
- {
- Value = "AC",
- }
- }
- },
- new Node()
- {
- Value = "B",
- Children = new List<Node>()
- {
- new Node()
- {
- Value = "BA",
- },
- new Node()
- {
- Value = "BB",
- },
- new Node()
- {
- Value = "BC",
- }
- }
- },
- new Node()
- {
- Value = "C",
- Children = new List<Node>()
- {
- new Node()
- {
- Value = "CA",
- },
- new Node()
- {
- Value = "CB",
- },
- new Node()
- {
- Value = "CC",
- }
- }
- },
- },
- };
- IEnumerable<Node> found = topNode.SearchTree((n) => n.Value == "BA", (n) => n.Children);
- foreach (var founditem in found)
- {
- Console.WriteLine(founditem.Value);
- }
- Output:
- BA
- The actual extension method:
- public static IEnumerable<T> SearchTree<T>(this T Parent, Predicate<T> Condition, Func<T, IEnumerable<T>> FindChild)
- {
- List<T> found = new List<T>();
- foreach (var item in FindChild(Parent))
- {
- //Check the current node.
- if (Condition(item))
- {
- found.Add(item);
- }
- //Search all children of the current node.
- IEnumerable<T> foundOnChild = SearchTree(item, Condition, FindChild);
- foreach (var foundItem in foundOnChild)
- {
- found.Add(foundItem);
- }
- }
- return found;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement