我有一系列字符串:
/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完成吗?或者其他一些方式?
答案 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));