1. 程式人生 > 其它 >大家來找茬---樹的遍歷

大家來找茬---樹的遍歷

 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     }