2012-01-24 15 views
0

サブカテゴリを持つ基本カテゴリオブジェクトがあります。再帰を使用して子要素のパスを作成する

カテゴリー

int Id 

string CategoryName 

string Path 

Category ParentCategory 

List<Category> SubCategories 

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

どのように私はすべてのカテゴリのパスを作成する関数を記述することができます。これは私のオブジェクトの構造を簡略化しているのですか?パスで

、私は意味:キーボード用

:アクセサリー用コンピュータ/アクセサリー/キーボード

:コンピュータ/アクセサリー

コンピュータの場合:コンピュータ

+1

はこの宿題ですか?もしそうなら、そのようにタグ付けされるべきです。さらに、私たちがあなたのためにあなたの仕事をしてくれれば、あなたにはあまり良いことはありません。問題を解決しようとすると、特定の困難に遭遇した場合は、コミュニティに助けを依頼してください。 – StriplingWarrior

+0

これは宿題ではありません。私は数時間それを解決しようとしています。オブジェクトと関係は私の仕事の複合体を表示することができたので、私はそれを共有しなかったし、これも簡略化したバージョン –

答えて

2
これは動作するはずのような何か

:スタックは厳密には必要ではないが、

public String getPath(Category cat) 
{ 
    if (cat.ParentCategory == null) return cat.CategoryName; 
    return getPath(cat.ParentCategory) + "/" + cat.CategoryName; 
} 
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; 

    } 

} 

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

String path=sb.ToString(); 
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)); 
     } 
    } 
関連する問題