C# 使用遞歸獲取所有下屬、所有子部門……


本例中獲取的是所有的晚輩!首先定義家庭成員類:

    public class FamilyMember
    {
        /// <summary>
        /// 身份
        /// </summary>
        public string identity { get; set; }
        public int level { get; set; }
        /// <summary>
        /// 父親
        /// </summary>
        public string father { get; set; }
    }

然后,定義遞歸方法:

        /// <summary>
        /// 遞歸獲取晚輩
        /// </summary>
        /// <param name="members"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        public static List<FamilyMember> GetYoungers(List<FamilyMember> members, FamilyMember m)
        {
            var result = new List<FamilyMember>();

            //獲取子女
            var subordinate = members.Where(e => e.father == m.identity).ToList();

            //如果存在子女
            if (subordinate != null)
            {
                result.AddRange(subordinate);
                foreach (var subo in subordinate)
                {
                    result.AddRange(GetYoungers(members, subo));
                }
            }

            return result;
        }

  方法解釋:

    首先,既然是遞歸,肯定是自己調用自己;

    然后,在方法體內部:

        既然要獲取所有的下屬(晚輩),首先要獲取自己的直屬下屬,並將結果存入“下屬”集合中;

        然后通過遞歸,獲取 “直屬下屬的直屬下屬”,同樣存入“下屬”集合中;

        最后,返回“下屬”集合。

遞歸測試:

        /// <summary>
        /// 測試遞歸
        /// </summary>
        public static void CheckRecursion()
        {
            List<FamilyMember> list = new List<FamilyMember>
            {
                new FamilyMember{ identity = "爺爺", level = 1, father = ""},
                new FamilyMember{ identity = "爸爸", level = 2, father = "爺爺"},
                new FamilyMember{ identity = "叔叔", level = 2, father = "爺爺"},
                new FamilyMember{ identity = "自己", level = 3, father = "爸爸"},
                new FamilyMember{ identity = "弟弟", level = 3, father = "爸爸"},
                new FamilyMember{ identity = "堂兄", level = 3, father = "叔叔"},
                new FamilyMember{ identity = "堂弟", level = 3, father = "叔叔"},
                new FamilyMember{ identity = "兒子", level = 4, father = "自己"},
                new FamilyMember{ identity = "女兒", level = 4, father = "自己"},
                new FamilyMember{ identity = "侄子", level = 4, father = "弟弟"},
                new FamilyMember{ identity = "侄女", level = 4, father = "弟弟"}
            };

            var self = new FamilyMember { identity = "爺爺", level = 1, father = "" };

            var youngers = GetYoungers(list, self).OrderBy(p => p.level).ToList();
            if(youngers != null)
            {
                foreach(var p in youngers)
                {
                    Console.WriteLine(p.identity);
                }
            }
        }

  調用該方法即可查看效果:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM