2017-06-02 78 views
0

我有一类节点查找嵌套列表中指定的字符串与递归

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; 
    } 

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

谢谢。

+0

我没有在这里看到递归......也许你需要再次调用'getNumber'而不是'getNumberFromName'? – kuskmen

+0

我的不好,应该getNumber,但无论如何它不工作,因为它应该。 – zari

回答

2

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

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

在哪里连字符的数目表示的深度。

+0

太好了,谢谢。现在它按预期工作:) – zari