【问题标题】:Sorting a FileInfo[] based using Natural Sorting on the filename (SQL files)基于对文件名(SQL 文件)使用自然排序对 FileInfo[] 进行排序
【发布时间】:2013-05-29 00:21:47
【问题描述】:

这是我的问题:

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

1-createtable.sql

2-modifytable.sql

.....

10-createanothertable.sql

等等。

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

10-createanothertable.sql

1-createtable.sql

2-modifytable.sql

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

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

【问题讨论】:

标签: c# sorting


【解决方案1】:

快捷方式:

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

缓慢但彻底的方法:

阅读 Sam Leach 评论中的链接。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我会这样实现:

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

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多