这是我的问题:
我正在尝试运行一堆使用如下命名系统的 SQL 文件:
1-createtable.sql
2-修改表.sql
......
10-createanothertable.sql
等等。
问题是,我用来获取文件的代码使用文件名作为字符串对它们进行排序,这导致文件被排序如下:
10-createanothertable.sql
1-createtable.sql
2-修改表.sql
我需要它们按“-”之前的数值运行。
我已经阅读并知道这称为自然排序,但希望在前进的道路上有某种方向。
快捷方式:
IEnumerable<FileInfo> fileInfosOrdered = fileInfos.OrderBy(fileInfo => int.Parse(fileInfo.Name.Substring(0, fileInfo.Name.IndexOf('-'))));
缓慢但彻底的方式:
阅读 Sam Leach 评论中的链接。
我建议一种更简单的方法,将数值从文件名中解析出来,然后将它们存储在System.Collections.Generic.SortedDictionary<TKey, TValue>数值是键,文件名是值的地方。然后,当您遍历键值对时,文件名将按排序顺序排列。
获取数字值的简单解析类似于:
string parts[] = filename.Split(new Char[] { '-'});
int numeric_part = UInt32.Parse(parts[0]);
我会这样实现:
var result = files.OrderByDesending(x => Regex.IsMatch(x.FullName, "^[0-9]+.+"));