【问题标题】:Find specified string in nested lists with recursion [duplicate]使用递归在嵌套列表中查找指定字符串[重复]
【发布时间】:2017-06-02 23:18:02
【问题描述】:

我有一个类节点

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

它从列表中的第一个项目迭代第一个嵌套列表,但不适用于其余项目的嵌套列表。谁能给我一个提示我的错误在哪里?

谢谢。

【问题讨论】:

  • 我没有看到这里的递归......也许你想再次调用getNumber而不是getNumberFromName
  • 我的错,应该改用 getNumber,但无论如何它都不能正常工作。

标签: c# recursion nested-lists


【解决方案1】:

你需要检查递归调用是否找到一个带有空检查的数字,否则你只检查第一项的子列表。此外,您不需要将 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

其中破折号的数量代表深度。

【讨论】:

  • 太好了,谢谢。现在它按预期工作:)
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多