zoukankan      html  css  js  c++  java
  • 记一则 Lambda内递归调用方法将集合对象转换成树形结构

     public dynamic GetDepartments(string labID)
            {
                List<int> usedIDs = new List<int>(); //缓存已用过的ID
    
                //定义递归算法
                Func<object,List<DepartmentItem>, List<DepartmentItem>, dynamic> recursion = (r,d,a) =>
                {
                    List<dynamic> dyData = new List<dynamic>();
                    if (d.Count > 0)
                    {
                        d.ForEach(x =>
                        {
                            if (!usedIDs.Contains(x.DepartmentID))
                            {
                                dynamic department = new ExpandoObject();
                                department.DepartmentID = x.DepartmentID;
                                department.DepartmentName = x.DepartmentName;
                                department.DepartmentDesc = x.DepartmentDesc;
                                department.CreateTime = x.CreateTime;
                                department.ParentDepartmentID = x.ParentDepartmentID;
                                usedIDs.Add(x.DepartmentID);
                               // department.children = recursion(r, d, a); 这里直接调用的话会提示未定义变量,因为func的定义还没结束..
                               // 所以用以下的方法:调用的时候用object把方法传进来,然后转换下再调用执行;
                                var func_recursion = r as Func<object, List<DepartmentItem>, List<DepartmentItem>, dynamic>;
                                department.children = func_recursion(r, a.Where(w => w.ParentDepartmentID == x.DepartmentID).ToList(), a);
                                dyData.Add(department);
                            }
                        });
                    }
    
                    return dyData;
                };
                var departments =.....//获取集合数据;
    
                //调用方法
                //这里第一个参数就是方法的本身,传递进去进行递归调用
                var result = recursion(recursion, departments, departments);
    
                return result;
    
            }
    

      代码是将集合对象转换成树形结构

  • 相关阅读:
    使用Vim写LaTeX代码(Vim+Vimtex+Skim)
    如何安装vim自动补全插件YouCompleteMe(YCM)
    我的vimrc配置
    囚徒问题(100 prisoners problem)的python验证
    tomcat下运行多个项目
    转使用chrome命令行:disable-web-security 实现浏览器跨域
    Spring Session
    nodejs 之 nvm和pm2
    chrome地址栏命令
    Koa2和相关资料
  • 原文地址:https://www.cnblogs.com/yesicoo/p/10947161.html
Copyright © 2011-2022 走看看