使用List的递归方法

时间:2011-08-25 08:45:42

标签: c# asp.net list recursion

在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?
}

3 个答案:

答案 0 :(得分: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 4调用方法时,categoryWithParents列表应包含(按添加顺序):

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我想你有一些像这样的代码

 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 =&gt;无事可做