C#如何使用linq按索引对文件列表进行排序

时间:2018-06-26 09:40:22

标签: c# linq sorting

您好,我需要对文件夹中的所有文件进行排序,但由于需要按索引对它们进行排序,因此卡住了。我给你举个例子:

我的文件格式如下:dateHoursMinutes_index_nameOfFile.dat

以前我用Array.Sort(_myFiles);对它们进行了排序,但是现在我需要按索引对它们进行排序。

如何使用linq来做到这一点?

谢谢

2 个答案:

答案 0 :(得分:5)

请参考以下示例代码:

string[] _myFiles = new string[4]
{
    "dateHoursMinutes_4_nameOfFile",
    "dateHoursMinutes_1_nameOfFile",
    "dateHoursMinutes_3_nameOfFile",
    "dateHoursMinutes_2_nameOfFile"
};

char[] sep = new char[1] { '_' };
string[] sorted = _myFiles
    .OrderBy(x => Convert.ToInt32(x.Split(sep)[1]))
    .ToArray();

答案 1 :(得分:2)

尝试从主字符串中使用Substring中的_index_

Lst<string> fileNames = new List<string>();

var SortedFiles = FileNames.OrderBy(x => Decimal.Parse(path.Substring(path.IndexOf("_") + 1, path.Substring(path.IndexOf("_") + 1).IndexOf("_"))).ToList();

编辑:对文件名进行排序,例如\\Programs\\Drop_99\\recepes\\CLF\\20180626113520_2_WAVES.dat 使用Path.GetFileName()

使用以下答案作为参考的解决方案。

 var sampl12836 = xspli.OrderBy(ele =>
 {
    var path = Path.GetFileName(ele);
    return Decimal.Parse(path.Split('_')[1]); 
 }).ToList();

使用我的答案的解决方案:-

var sorted = FileNames.OrderBy(ele =>
{
    var path = Path.GetFileName(ele);
    int firstIndex = path.IndexOf("_");
    return Decimal.Parse(path.Substring(path.IndexOf("_") + 1, path.Substring(firstIndex + 1).IndexOf("_"))); 
}).ToList();