1

カテゴリの順序付き分岐リストを作成しようとしているので、サブカテゴリを見つけ"-"て最初に追加できます。また、そのカテゴリに含まれる可能性のあるサブカテゴリや追加"--"などもあります。

私のテストクラスのプロパティは次のようになります。

    public int Id { get; set; }
    public int OrderInList { get; set; }
    public int ParentId { get; set; }
    public IList<TestCategories> Subcategories { get; set; }

例:

Books
-Special Offers
--Fiction
-eBooks 
--Pdf
--Mobi
Maps
-United Kingdom
--Cumbria
--West Yorkshire

、、およびのデフォルトのルートレベルカテゴリがId: 1ありParentId: 1ますOrderInList: 1
したがって、上記の順序は次のようになります。

Id   | ParentId  |  OrderInList   
 2         1             1      //Books
 3         2             1      //-Special Offers
 4         3             1      //--Fiction
 5         2             2      //-eBooks
 6         5             1      //--Pdf
 7         5             2      //--Mobi
 8         1             2      //Maps
 9         8             1      //-United Kingdom
 10        9             1      //--Cumbria
 11        9             2      //--West Yorkshire

完全に順序付けされていないリストを上記のように並べ替えるにはどうすればよいですか?

4

1 に答える 1

3

この種の並べ替えは、トポロジカル 並べ替えと呼ばれます。リストをトポロジー的にソートする最も簡単な方法は、深さ優先再帰検索を使用することです。ノードを離れる順序は逆トポロジーです。名前の前に配置するダッシュの数を知るために、ツリー内のノードの深さを知る必要がある場合は、int level深さ優先の再帰メソッドに変数を追加できます。

Rosetta Codeから実装を借りることができます。C# には実装がありませんが、Java には簡単に変換できるはずです。

于 2012-08-14T13:42:39.130 に答える