项目作者: TwAnjos

项目描述 :
Lista aninhada recursiva, criando populando e lendo uma lista de objetos que possuem uma lista de objetos infinitos.
高级语言: JavaScript
项目地址: git://github.com/TwAnjos/ListNested.git
创建时间: 2020-11-26T00:25:17Z
项目社区:https://github.com/TwAnjos/ListNested

开源协议:

下载


ListNested

Lista aninhada recursiva, criando populando e lendo uma lista de objetos que possuem uma lista de objetos infinitos


Default.cs

  1. private HashSet<Pessoa> listaDePessoas;
  2. private List<Pessoa> ListaLienar = new List<Pessoa>();
  3. private HashSet<Pessoa> listAninhada = new HashSet<Pessoa>();
  4. protected void Page_Load(object sender, EventArgs e)
  5. {
  6. carregaListaDePessoas();
  7. listAninhada = RetornaListRecursiva();
  8. CarregaAListaLienar(listAninhada);
  9. var tw = JsonConvert.SerializeObject(listAninhada);
  10. var tw3 = JsonConvert.SerializeObject(ListaLienar);
  11. }
  12. private void CarregaAListaLienar(HashSet<Pessoa> listAninhada)
  13. {
  14. int grau = 0;
  15. foreach (var la in listAninhada)
  16. {
  17. addNewPessoa(la, grau);
  18. grau++;
  19. //addOsFilhos
  20. List<Pessoa> filhola = pegaOsFilhos(la.listFilhos, grau);
  21. grau = 0;
  22. }
  23. }
  24. private List<Pessoa> pegaOsFilhos(List<Pessoa> listFilhos, int grau)
  25. {
  26. List<Pessoa> newlistpessoa = new List<Pessoa>();
  27. foreach (var item in listFilhos)
  28. {
  29. addNewPessoa(item, grau);
  30. newlistpessoa.Add(item);
  31. grau++;
  32. pegaOsFilhos(item.listFilhos, grau);
  33. grau--;
  34. }
  35. return newlistpessoa;
  36. }
  37. private Pessoa addNewPessoa(Pessoa la, int grau)
  38. {
  39. var np = new Pessoa
  40. {
  41. id = la.id,
  42. idPai = la.idPai,
  43. grauParentesco = grau,
  44. listFilhos = null
  45. };
  46. ListaLienar.Add(np);
  47. return np;
  48. }
  49. private HashSet<Pessoa> RetornaListRecursiva()
  50. {
  51. var lp = listaDePessoas
  52. .Where(pessoa => pessoa.idPai == 0) //Localiza a primeira pessoa sem pai.
  53. .Select(pai => new Pessoa //Seleciona a pessoa
  54. {
  55. id = pai.id,
  56. idPai = pai.idPai,
  57. listFilhos = ObterFuncoesFilhas(listaDePessoas, pai.id),//insere os filhos
  58. }).ToHashSet();
  59. return lp;
  60. }
  61. //Resumindo... o HashSet funciona como um List melhorado, se você não sabe o que é Lista não deveria estar aqui...
  62. private List<Pessoa> ObterFuncoesFilhas(HashSet<Pessoa> listFunction, int idDoPai)
  63. {
  64. var lt = listFunction.Where(pessoa => pessoa.idPai == idDoPai) //localiza quem tem o mesmo idPai que o id do pai.
  65. .Select(filho => new Pessoa()
  66. {
  67. id = filho.id,
  68. idPai = filho.idPai,
  69. listFilhos = ObterFuncoesFilhas(listFunction, filho.id) //Chama essa mesma função para verificar se este filho Tem outros filhos, etc, etc....
  70. }).ToList();
  71. return lt;
  72. }
  73. private void carregaListaDePessoas()
  74. {
  75. //populando a lista com vários objeto Pessoa
  76. listaDePessoas = new HashSet<Pessoa>();
  77. listaDePessoas.Add(new Pessoa() { id = 1, idPai = 0 });
  78. listaDePessoas.Add(new Pessoa() { id = 3, idPai = 1 });
  79. listaDePessoas.Add(new Pessoa() { id = 6, idPai = 1 });
  80. listaDePessoas.Add(new Pessoa() { id = 7, idPai = 6 });
  81. listaDePessoas.Add(new Pessoa() { id = 8, idPai = 6 });
  82. listaDePessoas.Add(new Pessoa() { id = 666, idPai = 8 });//filho maltido
  83. listaDePessoas.Add(new Pessoa() { id = 9, idPai = 6 });
  84. listaDePessoas.Add(new Pessoa() { id = 4, idPai = 0 });
  85. listaDePessoas.Add(new Pessoa() { id = 5, idPai = 4 });
  86. listaDePessoas.Add(new Pessoa() { id = 12, idPai = 4 });
  87. listaDePessoas.Add(new Pessoa() { id = 10, idPai = 5 });
  88. listaDePessoas.Add(new Pessoa() { id = 11, idPai = 5 });
  89. listaDePessoas.Add(new Pessoa() { id = 13, idPai = 1 });
  90. }
  91. public class Pessoa
  92. {
  93. public Pessoa()
  94. {
  95. listFilhos = new List<Pessoa>();
  96. }
  97. public int id { get; set; }
  98. public int idPai { get; set; }
  99. public int grauParentesco { get; set; }
  100. public List<Pessoa> listFilhos { get; set; }
  101. }