C# 使用递归获取所有下属、所有子部门……
2024-09-27 08:49:17
本例中获取的是所有的晚辈!首先定义家庭成员类:
public class FamilyMember
{
/// <summary>
/// 身份
/// </summary>
public string identity { get; set; }
public int level { get; set; }
/// <summary>
/// 父亲
/// </summary>
public string father { get; set; }
}
然后,定义递归方法:
/// <summary>
/// 递归获取晚辈
/// </summary>
/// <param name="members"></param>
/// <param name="m"></param>
/// <returns></returns>
public static List<FamilyMember> GetYoungers(List<FamilyMember> members, FamilyMember m)
{
var result = new List<FamilyMember>(); //获取子女
var subordinate = members.Where(e => e.father == m.identity).ToList(); //如果存在子女
if (subordinate != null)
{
result.AddRange(subordinate);
foreach (var subo in subordinate)
{
result.AddRange(GetYoungers(members, subo));
}
} return result;
}
方法解释:
首先,既然是递归,肯定是自己调用自己;
然后,在方法体内部:
既然要获取所有的下属(晚辈),首先要获取自己的直属下属,并将结果存入“下属”集合中;
然后通过递归,获取 “直属下属的直属下属”,同样存入“下属”集合中;
最后,返回“下属”集合。
递归测试:
/// <summary>
/// 测试递归
/// </summary>
public static void CheckRecursion()
{
List<FamilyMember> list = new List<FamilyMember>
{
new FamilyMember{ identity = "爷爷", level = , father = ""},
new FamilyMember{ identity = "爸爸", level = , father = "爷爷"},
new FamilyMember{ identity = "叔叔", level = , father = "爷爷"},
new FamilyMember{ identity = "自己", level = , father = "爸爸"},
new FamilyMember{ identity = "弟弟", level = , father = "爸爸"},
new FamilyMember{ identity = "堂兄", level = , father = "叔叔"},
new FamilyMember{ identity = "堂弟", level = , father = "叔叔"},
new FamilyMember{ identity = "儿子", level = , father = "自己"},
new FamilyMember{ identity = "女儿", level = , father = "自己"},
new FamilyMember{ identity = "侄子", level = , father = "弟弟"},
new FamilyMember{ identity = "侄女", level = , father = "弟弟"}
}; var self = new FamilyMember { identity = "爷爷", level = , father = "" }; var youngers = GetYoungers(list, self).OrderBy(p => p.level).ToList();
if(youngers != null)
{
foreach(var p in youngers)
{
Console.WriteLine(p.identity);
}
}
}
调用该方法即可查看效果:
最新文章
- C# dynamic 动态创建 json
- 在yii框架中如何连接数据库mongodb
- JavaScript toLocaleString() 方法
- Longest Substring Without Repeating Characters (c#)
- JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)
- jsp中 response和request区别
- Windows网络共享权限设置
- 【转载】Web应用工作原理
- Hessian介绍
- [JAVA关键字] static &; final
- Covariant Returen Types(协变返回类型)
- jquery中read与js中onload区别
- Java工程师修炼之路(校招总结)
- Python学习(三十五)—— Django之ORM训练专题
- Spring容器技术内幕之BeanWrapper类介绍
- redis的主从服务器配置
- MySQL数据库基础备份
- Codeforces Round #439 (Div. 2) Problem B (Codeforces 869B)
- php base64转图片
- php获取微信用户信息(没测试过)