C# 一次循环获取树的两种方法
第一种方法好些
第二种方法如果中间断开就会成为一级
private static List<Menu> MenuTree()
{
var menu1 = new Menu { Id = , ParentId = , Name = "aaa" };
var menu2 = new Menu { Id = , ParentId = , Name = "bbb" };
var menu3 = new Menu { Id = , ParentId = , Name = "ccc" };
var menu4 = new Menu { Id = , ParentId = , Name = "ddd" };
var menu5 = new Menu { Id = , ParentId = , Name = "eee" };
var menu6 = new Menu { Id = , ParentId = , Name = "fff" };
var menu7 = new Menu { Id = , ParentId = , Name = "ggg" };
var menu8 = new Menu { Id = , ParentId = , Name = "hhh" };
var menuAll = new List<Menu> { menu1, menu2, menu3, menu4, menu5, menu6, menu7, menu8 };
var menuList = new List<Menu> { menu1, menu2, menu3, menu4, menu5, menu7, menu8 };
//第一种方法
while (true)
{
var idList = menuList.Select(x => x.Id).ToList();
idList.AddRange(menuList.Select(x => x.ParentId).ToList());
idList = idList.Distinct().ToList();
var menus = menuAll.Where(x => idList.Contains(x.Id)).ToList();
if (menus.Count != menuList.Count)
{
menuList = menus;
continue;
} break;
}
//第二种方法
var ret = new List<Menu>();
foreach (var menu in menuList)
{
var model = menuList.FirstOrDefault(x => x.Id == menu.ParentId);
if (model == null)
{
ret.Add(menu);
continue;
} model.Children.Add(menu);
} return ret;
}
C# 一次循环获取树的两种方法的更多相关文章
- javascript获取属性的两种方法及区别
javascript获取属性有两种方式,点或者中括号: var obj={} obj.x=1 console.log(obj.x)//1 第一种方式,x是字面量 try{ console.log(ob ...
- ajax获取值的两种方法
详细连接https://blog.csdn.net/a1102325298/article/details/80785143 ajax获得表单值的俩种方法 2018年06月23日 17:12:02 延 ...
- Java中for循环遍历List的两种方法
我们平常使用的方法: List<WebElement> element = driver.findElements(By.tagName("input")); ...
- Android从Camera中获取图片的两种方法
方法一: 此方法会由Camera直接产生照片回传给应用程序,但是返回的是压缩图片,显示不清晰 ? 1 2 3 4 5 6 try { Intent cameraIntent = new In ...
- windows下获取IP地址的两种方法
windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- 获取网页URL地址及参数等的两种方法(js和C#)
转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...
- Java 获取*.properties配置文件中的内容 ,常见的两种方法
import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...
- javascript获取json对象的key名称的两种方法
javascript获取json对象的key名称的两种方法 数据处理中,你可能接收到一个不确定内容格式的json对象,然后要把key的值提取出来.今天试过两种可以提取json key的方法,均可以正常 ...
随机推荐
- istio-ServiceMesh解决方案
istio-ServiceMesh解决方案 istio(1):ServiceMesh解决方案-k8s安装istio istio(2):流量管理-基于不同版本访问规则控制 istio(3):流量管理-基 ...
- java实现交集,并集,包括对象和基本类型
//java实现求交集,并集,包括元素为对象和基本类型,主要是利用hashMap,set不允许元素重复等特性来进行实现去重,利用反射机制来灵活配置以对象某个属性来进行去重./** * Gaoxl * ...
- 杭电------2097 Sky数(C语言写)
//这个题没有一次过,哈哈哈哈,题意理解错了,开始还以为是必须加起来等于22呢 //其实就是依次算出个进制下的和,虽然每个循环最多循环四次,但是还是加上必要的判断,想办法让 //提前结束 #inclu ...
- HTTP下帐号密码的截取
用到工具: arpspoof -->>IP欺骗 ettercap -->>抓包 攻击者:192.168.100.110 kali 实验者:192.168.100 ...
- input event兼容性
<div class="wrapper"> <p>keypress - event not call on adroid</p> <inp ...
- asp.net MVC项目开发之统计图的使用(前言)
接触这个项目,是项目组长已经完成了多数需求,并且有2个项目需要完工的情况下,让我加入,给了我2个表格,让我去设计出统计图. 第一次做统计图,可以说没有任何经验,不知道该如何下手,表格的数据量 ...
- GNU make doc - 3.8
Note that the directory prefix (D), as described in Implicit Rule Search Algorithm, is appended (aft ...
- The finally block does not always execute in try finally
A finally block does not always xecute. The code in the try block could go into an infinite loop, th ...
- CSS中元素的显示模式
在CSS中,根据元素显示模式的不同元素标签被分为了两类:行内元素(inline-level).块级元素(block-level). 1,首先介绍什么是行内元素,什么又是块级元素? 1.1,行内元素就 ...
- leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...