Member 13725613 Ответов: 2

Пройдите через вложенную структуру данных


У меня есть своего рода древовидная структура.

Как вы можете видеть, это может иметь любую глубину. Однако сейчас у меня есть проблемы с прохождением этой структуры. С помощью циклов foreach я всегда могу искать только один список, но не дочерние списки. Как бы вы это сделали?

Что я уже пробовал:

public class MyClass
{
   public string Name{ get; set; }
   public List<MyClass> Children { get; set; }
}

2 Ответов

Рейтинг:
16

OriginalGriff

Это англоязычный сайт, и мы принимаем и отвечаем на вопросы только на этом языке. В будущем, пожалуйста, используйте Google Translate, чтобы помочь разместить свой вопрос - он делает довольно хорошую работу!

Самый простой способ обработки списков списков, глубина которых неизвестна, - это использовать рекурсию:

public void Process(MyClass mc)
   {
   ... Process instance mc ...
   if (mc.Children != null)
      {
      foreach (MyClass child in mc.Children)
         {
         Process(child);
         }
      }
   }
Передайте ему "главный предмет", и он выполнит одну и ту же операцию над каждым ребенком, независимо от глубины.


Рейтинг:
1

Mehdi Gholam

Учитывая а search() функция :

public MyClass search(Myclass node)
{
    foreach(var c in node.Children)
    {
       // search code here if found
       // return c

       // else go down
       var ret = search(c);
       if(ret != null)
          return ret;
    }
    return null;
}
Вы можете переключать блоки, чтобы сделать поиск глубины первым.