C# 使用递归获取所有下属、所有子部门……
本例中获取的是所有的晚辈!首先定义家庭成员类:
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# 使用递归获取所有下属、所有子部门……的更多相关文章
- php 获取文件下的所有文件。php 获取文件下的所有子文件。php 递归获取文件下的所有文件。封装好的方法
//php 获取文件下的所有文件.php 获取文件下的所有子文件.php 递归获取文件下的所有文件.直接上封装好的php代码 <?php //文件路径 $dir = dirname(__FILE ...
- MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...
- 【吐血分享】SQL Server With As 递归获取层级关系数据
纯洁的一周又开始了,今天看到一则新闻,笑尿了,和袁友们一起娱乐下 最近两月在做基于Saas模式的人力资源管理产品,平常数据库设计我经常会遇到如下需求场景: 以前商城类网站在设计类型表的时候,设计成单表 ...
- Think PHP递归获取所有的子分类的ID (删除当前及子分类)
递归获取所有的子分类的ID: //递归获取所有的子分类的ID function get_all_child($array,$id){ $arr = array(); foreach($array as ...
- 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
在实际更新Mongo对象时发现,原有的更新代码无法更新复杂的数据类型对象.恰好看到张占岭老师有对该方法做相关的改进,因此全抄了下来. 总的核心思想就是运用反射与递归,对对象属性一层一层挖掘下去,循环创 ...
- php递归获取顶级父类id
php递归获取顶级父类id function get_top_parentid($id){ $r = M('navclass')->where('id = '.$id)->field('i ...
- 递归获取XML元素
看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...
- Java 递归获取一个路径下的所有文件,文件夹名称
package com.readfile; import java.io.File; public class GetAllFiles { public static void main(String ...
- js递归获取html页面所有标签
js原生递归获取,直接源码 : <script> var child = document.children; var arr = [];//用来存放获取到的所有的标签 function ...
随机推荐
- hadoop 空间配置
hadoop-------------- 分布式计算框架. common // hdfs //存储 mapreduce //MR,编程模型. yarn //资源调度. 集群部署----------- ...
- Angular Material 学习笔记 Chips
依据 material guidelines, chips 可以用来做 filter https://material.io/design/components/chips.html#filter-c ...
- Python查看模块
1.查看Python所有内置模块 按以下链接打开,每个模块有介绍,可以选择不同的版本 https://docs.python.org/3.6/library/index.html 2.查看Python ...
- Snort Rule Infographic
Snort Rule Infographic Official Documentation Snort FAQ Snort Team / Open Source Community Snort Us ...
- JAVA操作ORACLE大对象
一:操作CLOB (1)数据库表结构如下: create table CLOB_TEST ( ID VARCHAR2(5) not null, ...
- java读取文件的几种方式性能比较
//普通输入流读取文件内容 public static long checksumInputStream(Path filename) { try(InputStream in= Files.newI ...
- stm32 触摸屏 XPT2046
引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...
- Android笔记(二十二) Android中的GridView
GridView和ListView一样,是Android中比较常见的布局控件,譬如我们的手机桌面其实就是一个GridView. 效果: 实现过程和ListView类似,也是通过Adapter将数据源展 ...
- Django:ContentType组件
一.项目背景 二.版本一 三.版本二 三.终极版(使用ContentType) 一.项目背景 luffy项目,有课程有学位课(不同的课程字段不一样),价格策略 问题:1.如何设计表结构,来表示这种规则 ...
- 在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用
当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的 ...