使用递归为子元素创建路径
本文关键字:元素 创建 路径 递归 | 更新日期: 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;
}
}