首页 > 技术文章 > 二维表转树结构

chaeyeon 2019-03-29 18:17 原文

 public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var nodes = new List<Node>()
            {
                new Node { Id = 1, PId = null, Data = "学校"},
                new Node { Id = 2, PId = null, Data = "医院" },
                new Node { Id = 3, PId = 1, Data = "小学" },
                new Node { Id = 4, PId = 3, Data = "一年级" },
                new Node { Id = 6, PId = 4, Data = "张三" },
                new Node { Id = 5, PId = 2, Data = "浙江附属医院" },
            };
          
            ToTree(nodes);
        }

      
        public void ToTree(List<Node> nodes,Node node=null)
        {
            if (node == null)
            {
                var parents = nodes.FindAll(f => f.PId == null);               
                foreach (var item in parents)
                {
                    ToTree(nodes,item);
                }
            }
            else if (nodes.Exists(f => f.PId == node.Id))
            {
                var childs = nodes.FindAll(f => f.PId == node.Id);
                node.Childs = childs;
                nodes.RemoveAll(a => childs.Contains(a));
                foreach (var item in childs)
                {
                    ToTree(nodes, item);
                }
            }
        }
     
    }
    public class Node
    {
        public int? Id { get; set; }
        public string Data { get; set; }
        public int? PId { get; set; }
        public List<Node> Childs { get; set; }
    }

 

推荐阅读