【C#】Windows排序方式实现 StrcmplogicalW
在C#开发中,字符串排序10会排在2的前面,使用StrcmplogicalW 方法可以实现和Windows排序一样的效果,2排在10前面。
[DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
当然我们也可以自己实现该排序方式:
using System; using System.Collections.Generic; using System.Globalization; public class LogicalComparer : IComparer<string> { private readonly CompareInfo _compareInfo; private readonly CompareOptions _options; public LogicalComparer(CultureInfo culture = null, bool ignoreCase = true) { _compareInfo = (culture ?? CultureInfo.CurrentCulture).CompareInfo; _options = ignoreCase ? CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace : CompareOptions.IgnoreNonSpace; } public int Compare(string x, string y) { if (x == y) return 0; if (x == null) return -1; if (y == null) return 1; // 使用CompareInfo进行逻辑比较 return _compareInfo.Compare(x, y, _options | CompareOptions.StringSort); } } public class Program { public static void Main() { string[] files = { "file1.txt", "file10.txt", "file2.txt", "FileA.txt", "Filea.txt", "file.txt" }; // 使用逻辑比较器排序 Array.Sort(files, new LogicalComparer()); Console.WriteLine("逻辑排序结果:"); foreach (var file in files) { Console.WriteLine(file); } } }
浙公网安备 33010602011771号