var files = Directory.GetFiles(@"C:\Users\user\Downloads\CaptchaCollection\Small").OrderBy(name => name).ToArray();
for (int i = 0; i < files.Length; i++)
{
MessageBox.Show(files[i].ToString());
}
所以我正在用消息框测试我的文件数组,但似乎没有按顺序给出名称。
我的文件名为n.png,其中n为数字。由于删除了一些图像,因此没有图案。
所以这是到目前为止的输出:
1
1001
1006
1008
1009
101
1016
1017
1019
1026
....
通常以手动升序我会得到类似:
1
2
4
5
7
...
我如何排序此数组,以便一切都按数字顺序?
最佳答案
该列表按字母顺序排序。您要订购的是数字。如果它们是数字,则可以执行以下操作:
Directory.GetFiles(@"C:\Users\user\Downloads\CaptchaCollection\Small").
Select(name => int.Parse(Path.GetFileNameWithoutExtension(name))).
OrderBy(number => number).
ToArray();
如果您想在仍然使用linq的同时过滤掉不是数字的文件名,则可以执行以下操作:
Directory.GetFiles(@"C:\Users\user\Downloads\CaptchaCollection\Small").
Select(nameWithExtension => Path.GetFileNameWithoutExtension(nameWithExtension)).
Where(name => {int number; return int.TryParse(name, out number);}).
Select(name => int.Parse(name)).
OrderBy(number => number).
ToArray();