Поиск самой длинной ветки дерева (List<>)

143
26 января 2021, 23:30

Есть такие классы

    private class Example
    {
        [Description("ThisAaaAtribute")]
        public string aaa { get; set; }
        [Description("ThixXxAtribute")]
        public double xxx { get; set; }
        [Description("ThisBbbClassAtribute")]
        public Example2 bbb { get; set; }
    }
    private class Example2
    {
        [Description("ThisCccAtribute")]
        public Example3 ccc { get; set; }
        [Description("ThiszzzAtribute")]
        public string zzz { get; set; }
        [Description("ThisVvvAtribute")]
        public string vvv { get; set; }
    }
    private class Example3
    {
        [Description("ThisxaSDAtribute")]
        public Example4 asxa { get; set; }
        [Description("ThisxaSDAtribute")]
        public Example4 asdasd { get; set; }
    }
    private class Example4
    {
        [Description("ThisxaSDAtribute")]
        public string qweqweqwe { get; set; }
    }

Кодом получаю коллекцию Description, необходимо программно получить коллекцию вложенных List = 4, для List = 3 и тд, как это можно реализовать?

Answer 1

Не в курсе ваших классов, но, может вам нужно вот такое

public static int GetListHeight(List<Table> list)
{
    if (list == null) return 0;
    if (list.Count == 0) return 1;
    return list.Max(l=>GetListHeight(l.Child)) + 1;
}
Answer 2

Вот так сделал поиск на самую длинную ветку дерева, может кто подскажет как сократить код?

    public static int GetListHeight(List<Table> list, int index = 1)
    {
        if (list == null) return 0;
        int height = index;
        for (int i = 0; i < list.Count; i++)
        {
            if (list[i].Child != null)
            {
                int updIndex = index + 1;
                var heightSubList = GetListHeight(list[i].Child, updIndex);
                if (heightSubList > height)
                {
                    height = heightSubList;
                }
            }
        }
        return height;
    }
READ ALSO
Как портировать .net winforms на mac os?

Как портировать .net winforms на mac os?

Всем приветВозникла задача портировать одно моё приложение написанное на языке c# (на платформе

101
Не работает Binding у StackPanel

Не работает Binding у StackPanel

Не работает Binding у StackPanel

114
Ошибка в Rider при запуске, во время выполнения сихронизации шаблонов

Ошибка в Rider при запуске, во время выполнения сихронизации шаблонов

Пользуюсь Windows 7x64 UltimateХочу попробовать Jet Brains Rider но получаю постоянную ошибку при запуске постоянное зависание, причем на всех версиях Rider 2017-2018...

169