使用递归在嵌套列表中查找指定的字符串

时间:2017-06-02 14:53:30

标签: c# recursion nested-lists

我有一个Node

 public class Node
    {
        public string Header { get; set; }
        public string Number { get; set; }
        public List<Node> Nodes { get; set; }
    }

嵌套级别是四个级别。我想要实现的是在任何嵌套列表中查找字符串下面的函数。这是一个功能:

public string getNumber(List<Node> currentList, string name)
    {
        string number = string.Empty;

        foreach (var item in currentList)
        {
            if (item.Header == name)
            {
                number = item.Number;
                return number;
            }
        }
        if (number == string.Empty)
        {
            foreach (var item in currentList)
            {
                number = getNumber(item.Nodes, name);
                return number;
            }
        }

        return null;
    }

它遍历列表中第一个项目的第一个嵌套列表,但不是其余项目嵌套列表。任何人都可以给我一个暗示我的错误在哪里?

感谢。

1 个答案:

答案 0 :(得分:2)

您需要检查递归调用是否找到带有空检查的数字,否则您只检查第一个项目的子列表。另外,您不需要初始化number以清空或在第一个foreach之后检查它,因为如果找到匹配项,您就已经返回了。如果您确实在初始列表中找到匹配项,则甚至不需要将其设置为number,因此您甚至不需要该变量直到您的第二个foreach。< / p>

public string getNumber(List<Node> currentList, string name)
{
    foreach (var item in currentList)
    {
        if (item.Header == name)
        {
            return item.Number;
        }
    }

   foreach (var item in currentList)
   {
       string number = getNumber(item.Nodes, name);
       if (number != null)
       {
           return number;
       }
   }

   return null;
}

另外,您可能想要考虑搜索内容的顺序。目前,这将按以下顺序进行搜索

  

-1

     

- 3

     

--- 5

     

--- 6

     

- 4

     

--- 7

     

-2

     

- 8

其中破折号代表深度。