配列の C# での自然順序ソートに関する優れたリソースやサンプルをお持ちの方はいらっしゃいますかFileInfo
? 私はソートにインターフェイスを実装していますIComparer
。
ベストアンサー1
最も簡単な方法は、Windows の組み込み関数を P/Invoke し、それを の比較関数として使用することですIComparer
。
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
マイケル・カプランはこの関数がどのように動作するかの例はここをご覧ください、そして Vista でより直感的に動作するように変更されました。この機能の利点は、それが実行される Windows のバージョンと同じ動作をすることですが、これは Windows のバージョンによって異なることを意味しますので、これが問題になるかどうかを検討する必要があります。
したがって、完全な実装は次のようになります。
[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern int StrCmpLogicalW(string psz1, string psz2);
}
public sealed class NaturalStringComparer : IComparer<string>
{
public int Compare(string a, string b)
{
return SafeNativeMethods.StrCmpLogicalW(a, b);
}
}
public sealed class NaturalFileInfoNameComparer : IComparer<FileInfo>
{
public int Compare(FileInfo a, FileInfo b)
{
return SafeNativeMethods.StrCmpLogicalW(a.Name, b.Name);
}
}