我如何按名称排序数组?

时间:2017-01-14 14:59:13

标签: c# .net winforms

我想将它排序为每个文件的名称数量。 数组内容是:

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

2 个答案:

答案 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