【问题标题】:Recursive method using List使用 List 的递归方法
【发布时间】:2011-11-03 11:40:33
【问题描述】:

在一个 asp.net 应用程序中,我有一个类别对象列表,在此列表中,每个类别都可以是另一个类别的父类别。

例子:

catid 1 catname cat1 parentid null
catid 2 catname cat2 parentid null
catid 3 catname cat3 parentid 2
catid 4 catname cat4 parentid 2
catid 5 catname cat5 parentid 4
catid 6 catname cat6 parentid 5
catit 7 catname cat7 parentid 5

我想写一个方法,循环遍历类别列表,拉出父类别并从列表中获取子类别。 这样做很容易,但我遇到的困难部分是我如何知道在递归方法中何时到达最后一个类别对象。

这就是我要寻找的逻辑

protected void load_categories(ref List<category> list, category item)
{
     //loop through list and match item ID with list item parent ID
     //loop through child items of category item using load_categories()
     //HOW DO I STOP ONCE EVERYTHING IS DONE?
}

【问题讨论】:

    标签: c# asp.net list recursion


    【解决方案1】:

    我会这样做:

    List<category> categoryWithParents = new List<category>();
    protected void load_categories(List<category> list, category item)
    {
        foreach(category cat in list)
        {
           if(item.id == cat.id)
           {
             categoryWithParents.Add(cat);
             if(cat.parentid != null) //if category has parent
               load_categories(list, cat); //load that parent
             break; //adding break should stop looping because we found category
           }
        }
    }
    

    当您调用具有catid 5 catname cat5 parentid 4categoryWithParents 类别的方法时,列表应包含(按添加顺序):

    catid 5 catname cat5 parentid 4    
    catid 4 catname cat4 parentid 2
    catid 2 catname cat2 parentid null
    

    【讨论】:

      【解决方案2】:

      您可以传递当前项目的索引,并且仅在索引小于列表中的项目数时继续。

      【讨论】:

        【解决方案3】:

        我想你有一些这样的代码

         results = new empty results
        
         For childItem in list
             if ( childItem.parentId == item.id ) 
                   results.add ( loadCategories( list, item )
             else 
                   // nothing to do
        
         return results
        

        所以你的递归停止只是失败了,这是 else => 无事可做

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-29
          • 1970-01-01
          • 2016-08-05
          • 1970-01-01
          • 1970-01-01
          • 2018-02-17
          • 2023-04-10
          相关资源
          最近更新 更多