您好,我需要对文件夹中的所有文件进行排序,但由于需要按索引对它们进行排序,因此卡住了。我给你举个例子:
我的文件格式如下:dateHoursMinutes_index_nameOfFile.dat
以前我用Array.Sort(_myFiles);
对它们进行了排序,但是现在我需要按索引对它们进行排序。
如何使用linq来做到这一点?
谢谢
答案 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();