Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#linq对文件路径集合进行排序_C#_Linq - Fatal编程技术网

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

如何使用c#linq对文件路径集合进行排序,c#,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.A

我有一组字符串:

/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));
列表值=新列表();
添加(“/a/b/111.txt”);
添加(“/a/b/c/222.txt”);
添加(“a/b/333.txt”);
添加(“a/b/c/d/444.txt”);
var sortedList=values.OrderBy(p=>p.Count(c=>c==Path.directoryseportorchar | | c==Path.altdirectoryseportorchar));

使用

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

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

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

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

你不能只按
Path.GetDirectoryName(inputStringPathHere)
排序吗?
data.OrderBy(x=>x.Split('/').Length)
?这个解决方案的问题是,如果在序列的开头有一个类似
/p/q/222.txt的路径,它可以作为第一个元素排序
var output = input.OrderBy(s => s.TrimStart('/')).ToList();