gpt4 book ai didi

c# - 我如何在 C# 中订购此站点 URL 列表?

转载 作者:太空狗 更新时间:2023-10-29 18:29:19 25 4
gpt4 key购买 nike

我有一个网站 URL 列表,

  • /node1
  • /node1/sub-node1
  • /node2
  • /node2/sub-node1

该列表以随机顺序提供给我,我需要对其进行排序,以便首先是顶级,然后是子级别等等(因为我无法创建 /node2/sub-node1 没有 /node2 存在)。有没有一种干净的方法可以做到这一点?

现在我只是进行递归调用,说如果我不能创建 sub-node1 因为 node2 存在,创建 node2。我想让列表的顺序决定创建并摆脱我的递归调用。

最佳答案

我的第一个想法是按字符串的长度排序......但后来我想到了这样一个列表,它可能包括短名称的别名之类的东西:

/longsitename/  /a  /a/b/c/  /a  /a/b/  /otherlongsitename/  

... and I thought a better option was to order by the number of level-separator characters first:

IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s.Count(c => c == '/')).ThenBy(s => s);
}

然后我又想了想,我在你的问题中看到了这一行:

I cannot create /node2/sub-node1 without /node2 existing

啊哈!部分或部分内的顺序并不重要,只要子项始终列在父项之后即可。考虑到这一点,我最初的想法是可以的,仅按字符串的长度排序应该就可以了:

IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s.Length);
}

这最终让我想知道为什么我关心长度?如果我只是对字符串进行排序,而不考虑长度,具有相同开头的字符串将始终首先对较短的字符串进行排序。因此,最后:

IEnumerable<string> SortURLs(IEnumerable<string> urls)
{
return urls.OrderBy(s => s);
}

我将保留第一个示例,因为如果在将来的某个时候您需要更符合词汇或逻辑的排序顺序,它可能会有用。

关于c# - 我如何在 C# 中订购此站点 URL 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17112733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com