排序的文件路径集合我有一个字符串的集合:如何使用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来完成吗?或者以其他方式?
排序的文件路径集合我有一个字符串的集合:如何使用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来完成吗?或者以其他方式?
你可以做到这一点,
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));
工作
这个解决方案的问题在于,例如,如果在序列的开头有一个类似'/ p/q/222.txt'的路径,它可以作为第一个元素 – octavioccl
您可以通过从字符串中的所有斜线实现这一目标进行比较:
items.OrderBy(item => item.Replace("/", ""));
鉴于
var input = new []
{
@"https://stackoverflow.com/a/b/111.txt",
@"https://stackoverflow.com/a/b/c/222.txt",
@"a/b/333.txt",
@"a/b/c/d/444.txt",
};
您可以通过删除“正常化”字符串中的领先/
(如果有的话),并用它作为排序键:
var output = input.OrderBy(s => s.TrimStart('/')).ToList();
你不能只用'Path.GetDirectoryName(inputStringPathHere)'排序? – Xerillio
'data.OrderBy(x => x.Split('/')。Length)'? – haim770