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

本文关键字:元素 创建 路径 递归 | 更新日期: 2023-09-27 18:21:13

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

类别

int Id
string CategoryName
string Path
Category ParentCategory
List<Category> SubCategories

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

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

路径,我的意思是:

适用于键盘:电脑/配件/键盘

配件:电脑/配件

对于计算机:计算机

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

这样的东西应该可以工作:

public String getPath(Category cat)
{
    if (cat.ParentCategory == null) return cat.CategoryName;
    return getPath(cat.ParentCategory) + "/" + cat.CategoryName;
}
Category cat=ParentCategory;
StringBuilder sb=new StringBuilder(CategoryName);
while (cat != null)
{
  sb.Insert(0,cat.Name+"/");
  cat=cat.ParentCategory;
}
String path=sb.ToString();

这可能会完成任务,尽管堆栈不是绝对必要的:

    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));
        }
    }
// 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;
    }
}