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的方法,均可以正常 ...
随机推荐
- [Effective Java 读书笔记] 第三章类和接口 第二十-二十一条
第二十条 用函数对象表示策略 函数指针(JAVA的函数指针,是指使用对象的引用来作为参数,传递给另一个对象的方法)主要用来实现策略模式,为了在JAVA中实现这种模式,要申明一个接口来表示该策略,并为每 ...
- 20200105--python学习数据类型总结
总结 python中的数据类型:整型/布尔类型/字符串/元组/列表/字典/集合 注意:列表,字典,集合都不能作为字典中的key,也不能作为集合中的元素 数据类型: (1)整型 (2)布尔类型:只有两个 ...
- vue路由--命名路由
有时我们通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候.你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称. 我们直接在路由下 ...
- 解决打开的小窗口回调参数的问题,layui
问题: 给用户新增优惠券,单个用户,单个优惠券,新增的话,用输入窗点击事件,点击后弹出一个子窗口列表页,选择数据后,点击确定,信息传回父窗口,主要是解决传值的问题. 解决思路: ...
- jenkins 参数化运行性能测试脚本
概述 我们用jenkins做持续集成的时候,常常需要跑不同的脚本,传不同的参数.尤其是性能基准测试,线程数和持续时间需要实时调整以满足我们的测试需求.那么是不是需求变了,我们 就需要重新准备一套脚本? ...
- Pandas常用功能
在使用Pandas之前,需要导入pandas库 import pandas as pd #pd作为pandas的别名 常用功能如下: 代码 功能1 .DataFrame() 创建一个DataFr ...
- 进阶之路 | 奇妙的IPC之旅
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: IPC的基础概念 多进程和多线程的概念 Android中的序列化机制和Binder Android ...
- update mysql row (You can't specify target table 'x' for update in FROM clause)
sql语句(update/delete都会出现此问题) update x set available_material_id = null where id not in (select id fro ...
- OBS使用教程
OBS使用教程 OBS使用教程:录屏热键的设置 视频:基础画布分辨率1920/1080 1366,768输出缩放分辨率常用FPS值 30或者60 输出:输出模式:高级录像:编码器x264码率控制 CB ...
- Ubuntu18.04安装mysql并配置远程访问
1.ssh连接到Ubuntu服务器 默认root用户登陆,如果运行以下命令没有权限请在命令开头加sudo 2.安装mysql apt install mysql-server 3.配置mysql my ...