无限级递归算法(使用多种层级数据)
程序员文章站
2022-05-30 23:25:58
...
1.首先数据结构必须是这样的,数据架构中带上parentId 才可以实现层级查询。
也可以把父级iD 改为子级ID 也就是 下一级的ID 但是 子级数据多的话数据会有缺陷,可以根据自己的需求来调整;
public class Menu {
// 菜单id
private String id;
// 菜单名称
private String name;
// 父菜单id
private String parentId;
// 菜单url
private String url;
// 菜单图标
private String icon;
// 菜单顺序
private int order;
// 子菜单
private List<Menu> children;
// ... 省去getter和setter方法以及toString方法
}
2.首先 书写,准备调用层级递归的函数,
/// <summary>
/// 根据userid获取用户的分享层级人数 递归 方法一
/// </summary>
/// <returns></returns>
public string GetUsershares()
{
//查询出来所有的分享数据。
var list = caseInteractionService.UsershareList().Select(n=> new UsershareView { uid=n.uid,pid=n.pid,caseid=n.caseid,ID=n.ID}).ToList();
//查询出来所有的根目录级的分享数据。
var lis= caseInteractionService.UsershareList().Where(n=>n.pid=="0").Select(n => new UsershareView { uid = n.uid, pid = n.pid, caseid = n.caseid, ID = n.ID }).ToList();
//循环所有根目录的分享数据,调用递归,去查询所有根目录下的子级分享数据(递归也是通过父级ID去定位查询的)
foreach (var item in lis)
{
//查询出来的子级集合,赋值给当前对象的子级集合属性中。
List<UsershareView> childList = getChild(item.ID.ToString(), list);
item.children = childList;
}
var result1 = JsonConvert.SerializeObject(lis);
return result1;
}
- 查询子级递归方法
/// <summary>
/// 获取子节点
/// </summary>
/// <param name="id"></param>
/// <param name="allMenu"></param>
/// <returns></returns>
public List<UsershareView> getChild(string id, List<UsershareView> allMenu)
{
//子菜单
List<UsershareView> childList = new List<UsershareView>();
foreach (var item in allMenu)
{
if (item.pid.Equals(id))
{
// 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
//相等说明:为该根节点的子节点。
childList.Add(item);
}
}
//递归
foreach (var obj in childList)
{
obj.children = getChild(obj.ID.ToString(), allMenu);
}
if (childList.Count() == 0)
{
return new List<UsershareView>();
}
return childList;
}
上一篇: http get 中文乱码解决方案
下一篇: 勿念
推荐阅读