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

时间:2016-08-21 13:22:27

标签: c# linq

我有一系列字符串:

/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完成吗?或者其他一些方式?

3 个答案:

答案 0 :(得分:2)

鉴于

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();

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你可以这样做,

 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));

工作.Net Fiddle