按最深目录排序路径列表

3

我需要对包含路径(相对或绝对)的列表进行排序,使最深的路径首先出现,例如:

\New Folder\Item1\tools\1
\New Folder\Item1\tools
\New Folder\Item1
\New Folder
等等...

是否有Path类中可用于此目的的API?

谢谢! J.

2个回答

7

这可能有些不寻常,但您始终可以这样做:

var sortedList = list.OrderByDescending(
    p => p.Count(c => c == Path.DirectorySeparatorChar
        || c == Path.AltDirectorySeparatorChar));

也就是说,按照路径分隔符出现的频率进行排序。

这也是我会这样做的方式! - Cerebrus
这要求所有路径都是绝对的。这是一个很好的要求,因为人们永远不知道相对路径所在的位置。 - Pasi Savolainen
是的,没错 - 你可能需要对每个字符串调用Path.GetFullPath,并为其提供它们都映射到的“根”路径。 - Matt Hamilton
这个可以工作,但如果列表中有多个根目录,它会混淆结果。 - Igal Tabachnik

-1

我假设这些路径是字符串,那么为什么不按降序排序呢?

var paths = new List<string>
{
  "\\New Folder",
  "\\New Folder\\tools",
  "\\Windows",
  "\\Windows\\System32",
  "\\New Folder\\tools\\1",
};

var result = paths.OrderByDescending(s => s);

或者如果它们在一个 string[] 中,你可以使用:

Array.Sort(paths);
Array.Reverse(paths);

结果是:

\Windows\System32
\Windows
\New Folder\tools\1
\New Folder\tools
\New Folder


(注:以上为程序相关内容)

问题在于\a\a\a\a会出现在最后,而它应该是第一个。 - Paul F. Wood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接