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
...
如何对此数组进行排序,以便所有内容都按数字顺序排列?
答案 0 :(得分:4)
该列表按字母顺序排序。你想要的是将它们命名为数字。如果是数字,您可以这样做:
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();