我想将它排序为每个文件的名称数量。 数组内容是:
0Infrared.jpg
10Infrared.jpg
12Infrared.jpg
14Infrared.jpg
16Infrared.jpg
2Infrared.jpg
4Infrared.jpg
6Infrared.jpg
8Infrared.jpg
但是我希望它能像在硬盘上那样被订购:
0Infrared.jpg
2Infrared.jpg
4Infrared.jpg
6Infrared.jpg
8Infrared.jpg
10Infrared.jpg
12Infrared.jpg
14Infrared.jpg
16Infrared.jpg
string[] list = Directory.GetFiles(countriesMainPath + "\\" + currentDownloadCountry,
"*infrared*.jpg");
Array.Sort(list, (x, y) => String.Compare(x.Name, y.Name));
变量x和y没有属性Name
答案 0 :(得分:1)
您必须提取数字,解析数字并按此数字对整个列表进行排序
string[] sorted = list.Select(x => new {
Item = x,
Number = int.Parse(Regex.Match(x, "[0-9]+").Value) })
.OrderBy(x => x.Number).Select(x => x.Item).ToArray();
请注意,此解决方案假定所有文件都以数字开头。
答案 1 :(得分:1)
你应该使用强类型集合,比如FileInfo数组,你可以使用DirectoryInfo.GetFiles或类似的重载来检索这样的集合
FileInfo有一个名称属性,您可以在比较器中使用
您正在进行的排序类型称为natural sort