Как я распечатываю древовидную структуру?

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

46
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

Уловка состоит в том, чтобы передать строку в качестве отступа и обработать последний дочерний элемент специально:

class Node
{    
   public void PrintPretty(string indent, bool last)
   {
       Console.Write(indent);
       if (last)
       {
           Console.Write("\\-");
           indent += "  ";
       }
       else
       {
           Console.Write("|-");
           indent += "| ";
       }
       Console.WriteLine(Name);

       for (int i = 0; i < Children.Count; i++)
           Children[i].PrintPretty(indent, i == Children.Count - 1);
   }
}

При таком вызове:

root.PrintPretty("", true);

будет выводить в следующем стиле:

\-root
  \-child
    |-child
    \-child
      |-child
      |-child
      \-child
        |-child
        |-child
        | |-child
        | \-child
        |   |-child
        |   |-child
        |   |-child
        |   \-child
        |     \-child
        |       \-child
        \-child
          |-child
          |-child
          |-child
          | \-child
          \-child
            \-child
79
ответ дан 26 November 2019 в 20:10
поделиться

Создать метод PrintNode и использовать рекурсию:

class Node
{
    public string Name;
    public decimal Time;
    public List<Node> Children = new List<Node>();

    public void PrintNode(string prefix)
    {
        Console.WriteLine("{0} + {1} : {2}", prefix, this.Name, this.Time);
        foreach (Node n in Children)
            if (Children.IndexOf(n) == Children.Count - 1)
                n.PrintNode(prefix + "    ");
            else
                n.PrintNode(prefix + "   |");
    }
}

А затем, чтобы распечатать все дерево, просто выполните:

topNode.PrintNode("");

В моем примере это даст нам что-то вроде этого:

 + top : 123
   | + Node 1 : 29
   |   | + subnode 0 : 90
   |   |     + sdhasj : 232
   |   | + subnode 1 : 38
   |   | + subnode 2 : 49
   |   | + subnode 8 : 39
   |     + subnode 9 : 47
     + Node 2 : 51
       | + subnode 0 : 89
       |     + sdhasj : 232
       | + subnode 1 : 33
         + subnode 3 : 57
9
ответ дан 26 November 2019 в 20:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: