55 lines
1.4 KiB
C#
55 lines
1.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Learn.Models;
|
|
|
|
public class TreeNode(Item item)
|
|
{
|
|
public class KeyValueInfo
|
|
{
|
|
public string Key { get; set; }
|
|
public string Value { get; set; }
|
|
public bool IsInherited { get; set; }
|
|
}
|
|
|
|
public TreeNode Parent => _parent;
|
|
public IEnumerable<TreeNode> Children => _children;
|
|
public Item Info => item;
|
|
|
|
private TreeNode _parent;
|
|
private readonly List<TreeNode> _children = new();
|
|
|
|
public void AddNode(TreeNode node)
|
|
{
|
|
if (_children.Contains(node)) return;
|
|
_children.Add(node);
|
|
node._parent = this;
|
|
}
|
|
|
|
public IEnumerable<KeyValueInfo> GetKeyValueInfos()
|
|
{
|
|
var result = new List<KeyValueInfo>();
|
|
var keys = new HashSet<string>();
|
|
var curr = this;
|
|
|
|
while (curr.Info != null)
|
|
{
|
|
foreach (var kv in curr.Info.Info)
|
|
{
|
|
if(!keys.Add(kv.Key)) continue;
|
|
var keyValueInfo = new KeyValueInfo();
|
|
|
|
if (curr != this)
|
|
{
|
|
keyValueInfo.IsInherited = true;
|
|
}
|
|
|
|
keyValueInfo.Key = kv.Key;
|
|
keyValueInfo.Value = kv.Value;
|
|
result.Add(keyValueInfo);
|
|
}
|
|
curr = curr.Parent;
|
|
}
|
|
return result;
|
|
}
|
|
} |