Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Just make a class out of it.</p> <p><strong>UPDATED:</strong></p> <pre><code>class TreeNode : IEnumerable&lt;TreeNode&gt; { private readonly Dictionary&lt;string, TreeNode&gt; _children = new Dictionary&lt;string, TreeNode&gt;(); public readonly string ID; public TreeNode Parent { get; private set; } public TreeNode(string id) { this.ID = id; } public TreeNode GetChild(string id) { return this._children[id]; } public void Add(TreeNode item) { if (item.Parent != null) { item.Parent._children.Remove(item.ID); } item.Parent = this; this._children.Add(item.ID, item); } public IEnumerator&lt;TreeNode&gt; GetEnumerator() { return this._children.Values.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } public int Count { get { return this._children.Count; } } } </code></pre> <p>Usage will be fairly simple to statically define:</p> <pre><code>var tree = new TreeNode("Root") { new TreeNode("Category 1") { new TreeNode("Item 1"), new TreeNode("Item 2"), new TreeNode("Item 3"), }, new TreeNode("Category 2") { new TreeNode("Item 1"), new TreeNode("Item 2"), new TreeNode("Item 3"), new TreeNode("Item 4"), } }; </code></pre> <p><strong>Edit</strong></p> <p>Some more functionality for even easier creation...</p> <pre><code>public static TreeNode BuildTree(string tree) { var lines = tree.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); var result = new TreeNode("TreeRoot"); var list = new List&lt;TreeNode&gt; { result }; foreach (var line in lines) { var trimmedLine = line.Trim(); var indent = line.Length - trimmedLine.Length; var child = new TreeNode(trimmedLine); list[indent].Add(child); if (indent + 1 &lt; list.Count) { list[indent + 1] = child; } else { list.Add(child); } } return result; } public static string BuildString(TreeNode tree) { var sb = new StringBuilder(); BuildString(sb, tree, 0); return sb.ToString(); } private static void BuildString(StringBuilder sb, TreeNode node, int depth) { sb.AppendLine(node.ID.PadLeft(node.ID.Length + depth)); foreach (var child in node) { BuildString(sb, child, depth + 1); } } </code></pre> <p><br> <strong>Usage:</strong></p> <pre><code>var tree = TreeNode.BuildTree(@" Cat1 Sub1 Item1 Item2 Item3 Sub2 Item1 Item2 Cat2 Sub1 Sub2 Item1 Item2 Sub3 Item1 Cat3 Cat4"); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload