使用文件名自然排序(SQL文件)对FileInfo []进行排序

时间:2013-05-29 00:21:48

标签: c# sorting

这是我的问题:

我正在尝试运行一堆使用命名系统的SQL文件,如下所示:

1-createtable.sql

2-modifytable.sql

.....

10 createanothertable.sql

等等。

问题是,我用来获取文件的代码使用文件名作为字符串命令它们导致文件的排序如下:

10 createanothertable.sql

1-createtable.sql

2-modifytable.sql

我需要它们按“ - ”之前的数值运行。

我已经阅读并知道这称为自然排序,但希望在去的路上有一些方向。

3 个答案:

答案 0 :(得分:0)

我建议采用一种更简单的方法,解析文件名中的数值,然后将它们存储在System.Collections.Generic.SortedDictionary<TKey, TValue>中,其中数值是键,文件名是值。然后,当您遍历键值对时,文件名将按排序顺序排列。

用于获取数值的简单解析将类似于:

string parts[] = filename.Split(new Char[] { '-'});
int numeric_part = UInt32.Parse(parts[0]);

答案 1 :(得分:0)

快捷方式:

IEnumerable<FileInfo> fileInfosOrdered = fileInfos.OrderBy(fileInfo => int.Parse(fileInfo.Name.Substring(0, fileInfo.Name.IndexOf('-'))));

缓慢而彻底的方式:

阅读Sam Leach评论中的链接。

答案 2 :(得分:0)

我会这样实现:

var result = files.OrderByDesending(x => Regex.IsMatch(x.FullName, "^[0-9]+.+"));