Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.17 KB | None | 0 0
  1. Example of it in use:
  2. Node topNode = new Node()
  3.             {
  4.                 Value = "Top",
  5.                 Children = new List<Node>()
  6.                 {
  7.                     new Node()
  8.                     {
  9.                         Value = "A",
  10.                         Children = new List<Node>()
  11.                         {
  12.                             new Node()
  13.                             {
  14.                                 Value = "AA",
  15.                             },
  16.                             new Node()
  17.                             {
  18.                                 Value = "AB",
  19.                             },
  20.                             new Node()
  21.                             {
  22.                                 Value = "AC",
  23.                             }
  24.                         }
  25.                     },
  26.                     new Node()
  27.                     {
  28.                         Value = "B",
  29.                         Children = new List<Node>()
  30.                         {
  31.                             new Node()
  32.                             {
  33.                                 Value = "BA",
  34.                             },
  35.                             new Node()
  36.                             {
  37.                                 Value = "BB",
  38.                             },
  39.                             new Node()
  40.                             {
  41.                                 Value = "BC",
  42.                             }
  43.                         }
  44.                     },
  45.                     new Node()
  46.                     {
  47.                         Value = "C",
  48.                         Children = new List<Node>()
  49.                         {
  50.                             new Node()
  51.                             {
  52.                                 Value = "CA",
  53.                             },
  54.                             new Node()
  55.                             {
  56.                                 Value = "CB",
  57.                             },
  58.                             new Node()
  59.                             {
  60.                                 Value = "CC",
  61.                             }
  62.                         }
  63.                     },
  64.                 },
  65.             };
  66.  
  67.  
  68.             IEnumerable<Node> found = topNode.SearchTree((n) => n.Value == "BA", (n) => n.Children);
  69.  
  70.             foreach (var founditem in found)
  71.             {
  72.                 Console.WriteLine(founditem.Value);
  73.             }
  74. Output:
  75. BA
  76.  
  77. The actual extension method:
  78.         public static IEnumerable<T> SearchTree<T>(this T Parent, Predicate<T> Condition, Func<T, IEnumerable<T>> FindChild)
  79.         {
  80.             List<T> found = new List<T>();
  81.             foreach (var item in FindChild(Parent))
  82.             {
  83.                 //Check the current node.
  84.                 if (Condition(item))
  85.                 {
  86.                     found.Add(item);
  87.                 }
  88.  
  89.                 //Search all children of the current node.
  90.                 IEnumerable<T> foundOnChild = SearchTree(item, Condition, FindChild);
  91.                 foreach (var foundItem in foundOnChild)
  92.                 {
  93.                     found.Add(foundItem);
  94.                 }
  95.  
  96.             }
  97.  
  98.             return found;
  99.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement