C# List无限层级算法

昨天遇到了一个回复评论的逻辑,评论涉及子级的子级,N级的N+1级.…..。这里的话可能就有两种模式来做了:

一种是参照CSDN的评论回复方式,只到二级,但是会加上A回复B的逻辑,这样的好处是层级太多,不容易展开来看,直接二级就很简洁;

第二种是根据层级来划分回复子级,也就是一层一层的展开,这样就可以清晰看见谁回复了谁,谁是谁的子级。

第一种的话做法相对简单:使用递归算法求出父级下的所有子级即可;

第二种相对麻烦一点,在得出父级与父级的子级后需要编写一个层级算法,把相关子级加到对应父级上去,第一种我就不多说了,比较简单。这里着重说第二种递归+层级:

这里直接上代码,大家可以通过代码清晰看出来逻辑:

        /// <summary>
        /// 将实体类转换为层级形式
        /// </summary>
        /// <param name="limits"></param>
        /// <param name="pid"></param>
        /// <returns></returns>
        public static List<Limit> ToHierarchy(List<Limit> limits, int? pid = 0)
        {
            List<Limit> newLimitList = new List<Limit>();
            newLimitList = limits.Where(t => t.pid == pid).ToList();

            for (int i = 0; i < newLimitList.Count; i++)
            {
                //这里循环调用ToHierarchy方法即是查询父级下的子级,N级下的N+1级,
                并添加到子级数据中
                newLimitList[i].Limits = ToHierarchy(limits, newLimitList[i].id);//下一层级
            }
            return newLimitList;
        }

        public class Limit
        {
            public int id { get; set; }
            public int? pid { get; set; }
            public string name { get; set; }
            public List<Limit> Limits { get; set; }
        }

      static void Main(string[] args)
        {
            List<Limit> limits = new List<Limit>();
            limits.Add(new Limit { id = 1, pid = 0, name = "任务管理" });
            limits.Add(new Limit { id = 2, pid = 0, name = "任务维护" });
            limits.Add(new Limit { id = 3, pid = 1, name = "下载" });
            limits.Add(new Limit { id = 4, pid = 3, name = "下载1" });
            limits.Add(new Limit { id = 5, pid = 3, name = "下载2" });
            var dd = ToHierarchy(limits);
            string json = JsonConvert.SerializeObject(dd);
            Console.WriteLine(json);
            Console.ReadLine();
      }

以上有哪里逻辑不明白的可以评论回复,博主会及时回复解答。

为您推荐

发表评论

您的电子邮箱地址不会被公开。