为什么我的文件数组不是数字顺序?

时间:2014-01-25 01:13:14

标签: c# .net arrays file sorting

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
...

如何对此数组进行排序,以便所有内容都按数字顺序排列?

1 个答案:

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