大家来找茬---树的遍历

 1         /// <summary>
 2         /// 给定一个组织Id,查找出这个组织的树结构(含岗位)
 3         /// </summary>
 4         /// <param name="organizationId">组织Id</param>
 5         /// <returns>结果</returns>
 6         public async Task<WebOrganizationTreeOutput> GetChilderPostion(string organizationId)
 7         {
 8             // 查找全部子集的岗位
 9             var organizationList = await WebOrganizationListSearch();
10             Func<string, List<WebOrganizationTreeOutput>, WebOrganizationTreeOutput> func = null;
11             func = (organizationId, list) =>
12             {
13                 if (list == null)
14                 {
15                     return null;
16                 }
17 
18                 foreach (var item in list)
19                 {
20                     if (item.OrganizationId == organizationId)
21                     {
22                         return item;
23                     }
24                     else if(item.OrganizationLevel > 0 && item.Childrens != null && item.Childrens.Count > 0)
25                     {
26                         return func(organizationId, item.Childrens);
27                     }
28                 }
29 
30                 return null;
31             };
32 
33             return func(organizationId, organizationList);
34         }

 

数据的结构

 1     /// <summary>
 2     /// 组织架构目录
 3     /// </summary>
 4     public class WebOrganizationTreeOutput
 5     {
 6         /// <summary>
 7         /// Id
 8         /// </summary>
 9         public string OrganizationId { get; set; }
10 
11         /// <summary>
12         /// 组织名称
13         /// </summary>
14         public string OrganizationName { get; set; }
15 
16         /// <summary>
17         /// 组织架构级别,默认从1开始
18         /// </summary>
19         public int OrganizationLevel { get; set; }
20 
21         /// <summary>
22         /// 代表数量
23         /// </summary>
24         public int UserCount { get; set; }
25 
26         /// <summary>
27         /// 父级组织架构ID
28         /// </summary>
29         public string? ParentOrganizationId { get; set; }
30 
31         /// <summary>
32         /// 下级
33         /// </summary>
34         public List<WebOrganizationTreeOutput> Childrens { get; set; }
35 
36         /// <summary>
37         /// 组织岗位
38         /// </summary>
39         public List<WebOrganizationPositionOutput> Position { get; set; }
40 
41         /// <summary>
42         /// 获取树的全部岗位
43         /// </summary>
44         /// <returns>结果</returns>
45         public List<string> GetTreeAllPosition()
46         {
47             List<string> list = new List<string>();
48             if (Position != null)
49             {
50                 list.AddRange(Position.Select(p => p.PositionId));
51             }
52 
53             Func<List<WebOrganizationTreeOutput>, List<string>> func = null;
54             func = (input) =>
55             {
56                 List<string> result = new List<string>();
57                 foreach (var item in input)
58                 {
59                     if (item.Position != null)
60                     {
61                         result.AddRange(item.Position.Select(p => p.PositionId));
62                     }
63 
64                     if (item.Childrens != null)
65                     {
66                         result.AddRange(func(item.Childrens));
67                     }
68                 }
69 
70                 return result;
71             };
72 
73             if (Childrens != null)
74             {
75                 list.AddRange(func(Childrens));
76             }
77 
78             return list;
79         }
80     }

 这是一个有问题的遍历方式,大家看看

posted @ 2022-12-12 12:03  个人天使  阅读(14)  评论(0编辑  收藏  举报