using System.Collections.Generic; using System.Runtime.Serialization; namespace Tree { [DataContract] public class AllTreeData { private readonly List treeNodeDatas = new List(); public int MaxNodeId { get; set; } public int MaxTreeId { get; set; } [DataMember(Order = 1)] public List TreeNodeDatas { get { return this.treeNodeDatas; } } private readonly Dictionary allTreeNodes = new Dictionary(); /// /// tree对应的root id /// private readonly Dictionary treeRootId = new Dictionary(); public void Init() { this.MaxNodeId = 0; this.MaxTreeId = 0; foreach (TreeNodeData nodeData in this.treeNodeDatas) { this.allTreeNodes[nodeData.Id] = nodeData; if (nodeData.Id > this.MaxNodeId) { this.MaxNodeId = nodeData.Id; } if (nodeData.TreeId > this.MaxTreeId) { this.MaxTreeId = nodeData.TreeId; } if (nodeData.Parent == 0) { this.treeRootId[nodeData.TreeId] = nodeData.Id; } } } public void Save() { treeNodeDatas.Clear(); foreach (KeyValuePair pair in allTreeNodes) { treeNodeDatas.Add(pair.Value); } } /// /// 删除一棵树的所有节点 /// /// public void Remove(int treeId) { var removeList = new List(); foreach (int key in this.allTreeNodes.Keys) { TreeNodeData nodeData = allTreeNodes[key]; if (nodeData.TreeId != treeId) { continue; } removeList.Add(key); } foreach (int key in removeList) { this.allTreeNodes.Remove(key); } Save(); } public TreeNodeData this[int id] { get { return this.allTreeNodes[id]; } } } }