2011-08-25 7 views
1

Dans une application asp.net, j'ai une liste d'objets catégories, dans cette liste chaque catégorie peut être un parent d'une autre catégorie.Méthode récursive utilisant la liste

Exemple:

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 

Je veux écrire une méthode qui boucle la liste des catégories, sort les catégories de parents et acquiert les catégories d'enfants de la liste. Cela est facile la partie difficile que j'ai des problèmes est de savoir comment savoir quand l'objet de la dernière catégorie a été atteint dans une méthode récursive.

C'est la logique que je cherche

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

Répondre

1

je le ferais:

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

lorsque vous appelez la méthode avec la catégorie catid 5 catname cat5 parentid 4 La liste categoryWithParents doit contenir (dans l'ordre d'ajout):

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

Vous pouvez passer l'index de l'élément courant autour et continuer seulement alors que l'indice est inférieur au nombre d'éléments dans la liste.

0

Je suppose que vous avez un code comme celui-ci

results = new empty results 

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

return results 

afin que votre récursivité s'arrêtant juste tombe, il est l'autre => rien à faire

Questions connexes