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

2:Code

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

    前言: swagger:神气十足,大摇大摆 在用Springboot进行开发时,有的实体类上用到了注解@ApiModelProperty("接受人代码"),特此整理此注解的出处及作 ...

  2. SpringMVC 参数中接收之一 List

    作者:张艳涛 time:2020-07-31 SpingMVC 一.前台传数组,SpingMVC用addusers(@RequestBody List<UserPojo> userlist ...

  3. jquery 对HTML标签的克隆、删除

    <table width="100%" class="table_form"> <tr> <td>奖励深度(<a hr ...

  4. HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR

    REMOTE_ADDR 是你的客户端跟你的服务器"握手"时候的IP.如果使用了"匿名代理",REMOTE_ADDR将显示代理服务器的IP. HTTP_CLIEN ...

  5. <题解>[SDOI2017]硬币游戏

    solutions 题面(loj) 题面(luogu) 这个题吧是我很久很久以前留下的坑了,到了今天才补好.(是不是太菜了) 暴力 这个和之前的题解一样,确实可以用 trie 树,这复杂度是\(\ma ...

  6. 百度地图API基本使用(一)

    本文系作者 chaoCode原创,转载请私信并在文章开头附带作者和原文地址链接. 违者,作者保留追究权利. 前言 由于最近项目有需要,所以最近开始研究百度地图API的使用,简单的介绍一下百度地图Jav ...

  7. 【LeetCode】34. 在排序数组中查找元素的第一个和最后一个位置

    34. 在排序数组中查找元素的第一个和最后一个位置 知识点:数组,二分查找: 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置 ...

  8. DL基础补全计划(六)---卷积和池化

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  9. Longhorn 企业级云原生容器存储解决方案-部署篇

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 安装 Longhorn 可以通过多种方式安装 ...

  10. 一看就会的高效Discuz初始化入门安装方法

    在使用Discuz搭建论坛的过程中,小九发现有许多朋友对于宝塔的安装和初始化不太熟悉,找不到适合的方法.或是按照一些教程安装却出现问题得不到解决,只能选择重新再来. 今天,小九给大家介绍简单的镜像一键 ...