如何使用c# linq对文件路径集合进行排序

本文关键字:集合 排序 路径 文件 何使用 linq | 更新日期: 2023-09-27 18:03:29

我有一个字符串集合:

/a/b/111.txt
/a/b/c/222.txt
a/b/333.txt
a/b/c/d/444.txt

我想要这个集合像这样排序:

/a/b/111.txt
a/b/333.txt
/a/b/c/222.txt
a/b/c/d/444.txt

所有的a/b被分组在一起,以此类推。

可以用linq来完成吗?或者其他方式?

如何使用c# linq对文件路径集合进行排序

给定

var input = new []
{
    @"/a/b/111.txt",
    @"/a/b/c/222.txt",
    @"a/b/333.txt",
    @"a/b/c/d/444.txt",
};

您可以通过删除前导/(如果有的话)并将其用作排序键来"规范化"字符串:

var output = input.OrderBy(s => s.TrimStart('/')).ToList();

您可以通过从正在比较的字符串中删除所有斜杠来实现这一点:

items.OrderBy(item => item.Replace("/", ""));

你可以这样做,

 List<string> values = new List<string>();
 values.Add("/ a /b/111.txt");
 values.Add("/ a / b / c / 222.txt");
 values.Add("a / b / 333.txt");
 values.Add("a / b / c / d / 444.txt");            
 var sortedList = values.OrderBy(p => p.Count(c => c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar));

Working .Net Fiddle