private void DataIni() { List<ReCls> lst = new List<ReCls>(); lst.Add(new ReCls() { id = "1", Name = "广东", ParerentId = "NULL" }); lst.Add(new ReCls() { id = "2", Name = "深圳", ParerentId = "1" }); lst.Add(new ReCls() { id = "3", Name = "惠州", ParerentId = "1" }); lst.Add(new ReCls() { id = "4", Name = "罗湖区", ParerentId = "2" }); lst.Add(new ReCls() { id = "5", Name = "福田区", ParerentId = "2" }); lst.Add(new ReCls() { id = "6", Name = "龙岗区", ParerentId = "2" }); lst.Add(new ReCls() { id = "7", Name = "惠阳区", ParerentId = "3" }); lst.Add(new ReCls() { id = "8", Name = "龙门县", ParerentId = "3" }); lst.Add(new ReCls() { id = "9", Name = "华强北", ParerentId = "5" }); lst.Add(new ReCls() { id = "10", Name = "体育馆", ParerentId = "5" } } public class ReCls { public string id { get; set; } public string Name { get; set; } public string ParerentId { get; set; } }
求递归遍历函数,C#版的
1:指定任意节点,可以获得以此节点的所有下级
2:指定任意节点,可以获得以此节点的所有父节点,并带有层级
3:指定任意节点,获得此节点的层级
其实只要告诉一个当前节点的id,就都可以知道了
是的,就是需要这个函数
@Alvin:
static void Main(string[] args) { List<ReCls> childs = new List<ReCls>(); Program.GetChilds("8",childs); List<ReCls> parents = new List<ReCls>(); Program.GetParents("2", parents); if (parents.Count > 0) parents.RemoveAt(0); Console.WriteLine("2这个节点的层次:" + (parents.Count + 1)); Console.ReadKey(); } private static List<ReCls> list = Program.DataIni(); private static List<ReCls> DataIni() { List<ReCls> lst = new List<ReCls>(); lst.Add(new ReCls() { id = "1", Name = "广东", ParerentId = "NULL" }); lst.Add(new ReCls() { id = "2", Name = "深圳", ParerentId = "1" }); lst.Add(new ReCls() { id = "3", Name = "惠州", ParerentId = "1" }); lst.Add(new ReCls() { id = "4", Name = "罗湖区", ParerentId = "2" }); lst.Add(new ReCls() { id = "5", Name = "福田区", ParerentId = "2" }); lst.Add(new ReCls() { id = "6", Name = "龙岗区", ParerentId = "2" }); lst.Add(new ReCls() { id = "7", Name = "惠阳区", ParerentId = "3" }); lst.Add(new ReCls() { id = "8", Name = "龙门县", ParerentId = "3" }); lst.Add(new ReCls() { id = "9", Name = "华强北", ParerentId = "5" }); lst.Add(new ReCls() { id = "10", Name = "体育馆", ParerentId = "5" }); return lst; } private static void GetChilds(string id,List<ReCls> c) { foreach (var item in list.Where(l => l.ParerentId == id)) { c.Add(item); Program.GetChilds(item.id,c); } } private static void GetParents(string id,List<ReCls> p) { foreach (var item in list.Where(l => l.id == id)) { p.Add(item); Program.GetParents(item.ParerentId, p); } }
@chenping2008:
不用Linq可吗?
@Alvin: 那就foreach(var item1 in list)
一个一个的判断
3个 函数 ?