c#外形编号

c#外形编号,c#,C#,我正在尝试用C语言开发一种算法,它可以获取URL的数组列表,并将它们输出到一个大纲编号的列表中 你可以想象我需要一些帮助。是否有人对生成此列表的逻辑有任何建议 示例输出: 1 - http://www.example.com/aboutus 1.2 - http://www.example.com/aboutus/page1 1.3 - http://www.example.com/aboutus/page2 1.3.1 - http://www.example.com/aboutus/

我正在尝试用C语言开发一种算法,它可以获取URL的数组列表,并将它们输出到一个大纲编号的列表中

你可以想象我需要一些帮助。是否有人对生成此列表的逻辑有任何建议

示例输出:

1   - http://www.example.com/aboutus
1.2 - http://www.example.com/aboutus/page1
1.3 - http://www.example.com/aboutus/page2
1.3.1   - http://www.example.com/aboutus/page2/page3
1.3.1.1 - http://www.example.com/aboutus/page2/page3/page4
1.3.2   - http://www.example.com/aboutus/page5/page6
1.3.2.1 - http://www.example.com/aboutus/page5/page7/page9
1.3.2.2 - http://www.example.com/aboutus/page5/page8/page10

1.4 - http://www.example.com/aboutus/page10
1.4.1   - http://www.example.com/aboutus/page10/page11
1.4.2   - http://www.example.com/aboutus/page10/page12

1.1.5   - http://www.example.com/aboutus/page13

1.1.6   - http://www.example.com/aboutus/page14
1.1.6.1 - http://www.example.com/aboutus/page14/page15
1.1.6.2 - http://www.example.com/aboutus/page14/page16
1.1.6.3 - http://www.example.com/aboutus/page14/page17
。。。等等

也许这会有帮助


在:,,上几乎没有树集合。

请查看System.URI类。它应该有一些有用的方法和属性,比如segments属性,它将uri拆分为它的分段部分(基本上用斜线分割)。您可以创建一个段数组列表,对列表进行排序,然后简单地迭代列表,根据当前列表索引段是否与以前的列表索引段匹配来调整数字

您可能需要剥离协议和查询字符串参数,因此+1建议使用
System.URI
类来处理该问题

至于以树形打印,直接的方法是使用
字典
来保持子项(键)与父项(值)的关联

另一种方法是利用
列表。排序
,例如:

public static void Print(List<string> list)
{
    var path = new Stack<string>();
    var count = new Stack<int>();
    path.Push("");
    count.Push(0);

    list.Sort(new Comparison<string>(UrlComparison));

    foreach (var x in list)
    {
        while (!x.StartsWith(path.Peek())) { path.Pop(); count.Pop(); }
        count.Push(count.Pop() + 1);
        foreach(var n in count.Reverse()) Console.Write("{0}.", n);
        Console.WriteLine(" {0}", x);
        path.Push(x);
        count.Push(0);
    }
}

PS:我只是想声明一下,我觉得栈的逻辑是经过深思熟虑的,但理解起来有点复杂。在一个长期项目中,我会坚持使用子-父字典。

我认为您需要实现某种树集合来处理顺序。因为如果您添加了一个名为的新链接,它将变成1而不是


然后,您可以按顺序打印树的遍历,这将非常简单。

hi,1.3.2和1.3.2.1中是否存在故障?我将调用第二个1.3.3.1-是这样吗?为什么这>>
1.1.5-http://www.example.com/aboutus/page13
?。为什么不是
1.5
?列表最初是否按照您希望的编号顺序排序?为什么
http://www.example.com/aboutus/aboutus
不是1.1?好吧,我得问一下:你试过什么?如果我看一下示例,1是1.2中的子字符串,1是1.3中的子字符串。可能是使用一个简单的逻辑字符串。包含的方法和通过有效的搜索算法,你可以实现这一点?很好的开始!一个缺点:排序是最新的,因此它感谢DK。这正是我需要的!
public static int UrlComparison(string x, string y)
{
    if (x == null && y == null) return 0;
    if (x == null) return -1;
    if (y == null) return 1;
    for(int n = 0; n < Math.Min(x.Length, y.Length); n++)
    {
        char cx = x[n], cy = y[n];
        if(cx == cy) continue;
        return
            (cx == '/' || cx == '.' || cx == '?') ? -1 :
            (cy == '/' || cy == '.' || cy == '?') ? 1 :
            (cx > cy) ? 1 : -1;
    }
    return (x.Length == y.Length) ? 0 : (x.Length > y.Length) ? 1 : -1;
}