0

这是我的问题:

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

1-createtable.sql

2-修改表.sql

......

10-createanothertable.sql

等等。

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

10-createanothertable.sql

1-createtable.sql

2-修改表.sql

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

我已经阅读并知道这称为自然排序,但希望在前进的道路上有某种方向。

4

3 回答 3

0

快捷方式:

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

缓慢但彻底的方式:

阅读 Sam Leach 评论中的链接。

于 2013-05-29T00:39:46.510 回答
0

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

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

string parts[] = filename.Split(new Char[] { '-'});
int numeric_part = UInt32.Parse(parts[0]);
于 2013-05-29T00:34:46.897 回答
0

我会这样实现:

var result = files.OrderByDesending(x => Regex.IsMatch(x.FullName, "^[0-9]+.+"));
于 2013-05-29T00:44:54.313 回答