LearnGodot/Models/TreeNode.cs
2025-12-17 18:55:48 +08:00

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;
}
}