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();

10-08 14:54
查看更多