使用递归为子元素创建路径

时间:2012-01-24 16:04:04

标签: c# .net recursion

我有一个基本类别对象,其中也包含子类别。这是我的对象结构的简化版本:

分类

int Id

string CategoryName

string Path

Category ParentCategory

List<Category> SubCategories

Computer
     --> Accessories
                 --> Keyboard
                 --> Mouse
     --> Storage
             --> Flash
             --> Micro

如何编写为所有类别创建路径的函数?

路径,我的意思是:

键盘:电脑/配件/键盘

配件:电脑/配件

对于计算机:计算机

4 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

public String getPath(Category cat)
{
    if (cat.ParentCategory == null) return cat.CategoryName;
    return getPath(cat.ParentCategory) + "/" + cat.CategoryName;
}

答案 1 :(得分:1)

// If grand parent category has null parent you can do

public toBreadCrumbs() {

    String out = this.CategoryName;

    for(Category aux = this.ParentCategory;aux != null;) {

        out = aux.CategoryName + ">" + out;

        aux = aux.ParentCategory;

    }

}

答案 2 :(得分:1)

Category cat=ParentCategory;
StringBuilder sb=new StringBuilder(CategoryName);
while (cat != null)
{
  sb.Insert(0,cat.Name+"/");
  cat=cat.ParentCategory;
}

String path=sb.ToString();

答案 3 :(得分:1)

这可能会完成这项工作,尽管堆栈并非绝对必要:

    public string Path
    {
        get
        {
            var pathStack = new Stack<Category>();
            var parentCategory = Parent;

            while (parentCategory != null)
            {
                pathStack.Push(parentCategory);
                parentCategory = parentCategory.ParentCategory ;
            }

            return String.Join("/", pathStack.Select(cat => cat.Name));
        }
    }