2011-08-25 112 views
1

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

回答

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 
0

邏輯你可以通過周圍的當前項目的索引,而指數小於列表中的項目的數量只會繼續。

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 

一些代碼,所以你的遞歸停止用剛掉出來,這是別的=>無關