1:在实际开发中,我们会经常使用到无限递归的情况,如菜单,父子级等的情况

2:Code

 1 using System;
2 using System.Collections.Generic;
3 using ConsoleApp1.Models;
4 using System.Linq;
5 using Newtonsoft.Json;
6 namespace ConsoleApp1
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 var allData = GetListData();
13 var parentNode = allData.Where(p => p.PParentId == 0).ToList();
14 List<PersonModel> tree = new List<PersonModel>();
15 foreach (var item in parentNode)
16 {
17 PersonModel p1 = new PersonModel { Children = new List<PersonModel> { } };
18 int _id = item.ID;
19 p1.ID = _id;
20 p1.Pname = item.Pname;
21 p1.Age = item.Age;
22 p1.PParentId = item.PParentId;
23 GetNewNodes(allData, p1);
24 tree.Add(p1);
25 }
26 string jsonTree = JsonConvert.SerializeObject(tree, Formatting.Indented);
27 Console.WriteLine(jsonTree);
28 Console.ReadKey();
29 }
30
31 static void GetNewNodes(List<PersonModel> all, PersonModel curItem)
32 {
33 var subItems = all.Where(c => c.PParentId == curItem.ID).ToList();
34 curItem.Children = new List<PersonModel>();
35 curItem.Children.AddRange(subItems);
36 foreach (var subItem in subItems)
37 {
38 GetNewNodes(all, subItem);
39 }
40 }
41 static List<PersonModel> GetListData()
42 {
43 return new List<PersonModel> {
44 new PersonModel{ID=1001,Age=68,Pname="QQ1",PParentId=0 },
45 new PersonModel{ID=1002,Age=78,Pname="ww",PParentId=0 },
46 new PersonModel{ID=1003,Age=67,Pname="dd",PParentId=0 },
47 new PersonModel{ID=1004,Age=88,Pname="ff",PParentId=0 },
48
49 new PersonModel{ID=1005,Age=18,Pname="gg",PParentId=1001},
50 new PersonModel{ID=1006,Age=16,Pname="cc",PParentId=1003},
51 new PersonModel{ID=1007,Age=17,Pname="aa",PParentId=1006},
52 new PersonModel{ID=1008,Age=19,Pname="tt",PParentId=1007},
53 new PersonModel{ID=1009,Age=20,Pname="ii",PParentId=1004},
54 new PersonModel{ID=1010,Age=22,Pname="ggf",PParentId=1003}
55 };
56 }
57 }
58 }

3:测试ok截图

C# .NetCore简单实现无限递归的功能的更多相关文章

  1. JPA一对多循环引用的解决&&JackSon无限递归问题

    说是解决,其实不是很完美的解决的,写出来只是想记录一下这个问题或者看一下有没有哪位仁兄会的,能否知道一二. 下面说说出现问题: 问题是这样的,当我查询一个一对多的实体的时候,工具直接就爆了,差不多我就 ...

  2. 无限“递归”的python程序

    如果一个函数直接或者间接调用了自己,那么就形成了递归(recursion),比如斐波那契数列的一个实现 def fib(n): if n <= 2: return 1 else: return ...

  3. 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器

    在C#WINFORM或者是ASP.NET的WEB应用程序中,根据各种定时任务的需求,比如:每天的数据统计,每小时刷新系统缓存等等,这个时候我们得应用到定时器这个东东. .NET Framework有自 ...

  4. jsp+servlet+mysql 实现简单的银行登录转账功能

    jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...

  5. 无限递归的构造器和javap使用指南

    无限递归的构造器和javap使用指南 public class ConstructorRecursion { ConstructorRecursion rc; { rc = newConstructo ...

  6. 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

    原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ...

  7. javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题

    前言: 该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频.javaCV.图像处理相关的体系知识和一些实用的知识. 序: javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在 ...

  8. python实现简单的循环购物车小功能

    python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...

  9. PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功能

    在之前的学习过程中我们接触过前后台数据请求交互的方法有表单提交.AJAX请求以及Angularjs中的$http,今天我们尝试在PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功 ...

随机推荐

  1. [考试总结]noip模拟17

    爆零了! 菜爆了 弱展了 垃爆了 没有什么可以掩饰你的菜了 这次考试为我带来了第一个 \(\color{red}{ \huge{0}}\) 分,十分欣慰.... 最近的暴力都打不对,你还想什么正解?? ...

  2. THE MINTO PYRAMID PRINCIPLE

    金字塔原理:(重点突出,逻辑清晰.层次分明,简单易懂的思考方式.沟通方式.规范的动作.) 结构:结论先行,以上统下,归类分组,逻辑递进.先重要后次要,先总结后具体,先框架后细节,先结论后原因,先结果后 ...

  3. jvm源码解读--18 Java的start()方法解读 以及 wait 和notify流程图

    drawwed by 张艳涛 and get info from openjdk8 还有一个图

  4. 如何获取SQL Server数据库连接字符串的某些部分

    有的时候需要获取SQL Server数据库连接字符串的某些部分.用正则表达式可能有点麻烦. 其实有一个比较简单的方法--使用SqlConnectionStringBuilder. var builde ...

  5. vue源码解析之observe

    一. vue文档中有"由于 JavaScript 的限制,Vue 不能检测以下数组的变动",是否真是由于JavaScript的限制,还是出于其他原因考虑 当你利用索引直接设置一个数 ...

  6. phpMyAdmin 4.0.x—4.6.2 远程代码执行漏洞(CVE-2016-5734)

    影响范围 4.0.10.16之前4.0.x版本 4.4.15.7之前4.4.x版本 4.6.3之前4.6.x版本(实际上由于该版本要求PHP5.5+,所以无法复现本漏洞) 需要登录,且能够写入数据 p ...

  7. 大数据学习(21)—— ZooKeeper原理

    这一篇我们对zookeeper的主要原理做一个简单介绍.zookeeper的核心原理是zookeeper atomic broadcast(ZAB协议),它来源于paxos协议.这里用通俗易懂的话,介 ...

  8. Java互联网架构师系统进阶课程学习 (4)【享学】

    Java互联网架构师系统进阶课程学习 (4)[享学] 4.显式锁和AQS   显式锁 Lock接口和核心方法 Lock接口和synchronized的比较 synchronized 代码简洁,Lock ...

  9. DHCP\PXE+kickstart网络装机平台

    DHCP概述及原理: ​ DHCP地址分配的四次会话 ​ DISCOVERY -****OFFER -REQUEST -ACK 服务端基本概念: 租期:允许客户机组用IP地址的时间期限,单位为秒 作用 ...

  10. Nacos 权限控制介绍及实战

    方案背景 Nacos自开源依赖,权限控制一直需求比较强烈,这也反应了用户需求将Nacos部署到生产环境的需求.最新发布的Nacos 1.2.0版本已经支持了服务发现和配置管理的权限控制,保障用户安全上 ...