在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次的排序要求
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次的排序要求
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)));
}