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: 1OrderInList: 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 回答