在DataView里有如下这几个字符串,需要按照以下方式排序:
205-1
205-1-a
205-1-b
205-2
205-2-a
205-10
205-10-a
205-11
205-11-a
希望用DataView的Sort属性对其排序成上面的样式,但是使用Sort属性排序后会变成:
205-1
205-10
205-11
205-1-a
205-1-b
205-10-a
205-11-a
205-2
205-2-a
但是在xp下面用以上几个字符串作为文件名排序,其排序方式能达到所需要的排序要求,请问是否能在
System.Globalization.CultureInfo.CompareInfo里面设置排序的区域属性或者修改其他属性达到上面
第1次的排序要求

解决方案 »

  1.   

    文件名智能排序的算法
    static Regex digitRegex = new Regex(@"\d+");
    static string[] SmartSort(IEnumerable<string> files)
    {
        //这里只传文件名,以避免不必要的开销,不同的文件夹的文件没有智能排序的必要
        var maxLength = files.Max(file => digitRegex.Matches(file).Cast<Match>().Max(num => num.Length));    var query = from file in files
                    let sortFile = digitRegex.Replace(file, m => m.Value.PadLeft(maxLength, '0'))
                    orderby sortFile
                    select file;    return query.ToArray();
    }static void Main(string[] args)
    {
        var files = Directory.GetFiles(@"R:\22").Select(i=>Path.GetFileName(i));    Console.WriteLine(string.Join("\r\n", SmartSort(files)));