zoukankan      html  css  js  c++  java
  • C# .NetCore简单实现无限递归的功能

    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截图

    如有疑问或者错误的地方,请跟帖,本人会第一时间答复以及相互学习,谢谢!个人会不断的上传自己的学习心得!

    我的博客园地址:https://www.cnblogs.com/Fengge518

  • 相关阅读:
    WPF
    binding(转)
    C# winForm调用WebService
    如何用vs2010打开vs2013的项目?
    pyqt——布局管理
    pyqt5——对话框
    pyqt5——俄罗斯方块游戏
    pyqt5——事件和信号
    pyQT5——hello world!
    PyQt5 简介
  • 原文地址:https://www.cnblogs.com/Fengge518/p/14733584.html
Copyright © 2011-2022 走看看