c#外形编号
我正在尝试用C语言开发一种算法,它可以获取URL的数组列表,并将它们输出到一个大纲编号的列表中 你可以想象我需要一些帮助。是否有人对生成此列表的逻辑有任何建议 示例输出: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/
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;
}