如何排序整数字符串?

Ram*_*oni 11 .net c# sorting

在使用整数值对字符串列表进行排序时,我遇到了一个奇怪的问题.但是,某些值可能会以某些字符作为前缀.

例如

// B1, 5, 50, A10, 7, 72, B3, A1, A2
Run Code Online (Sandbox Code Playgroud)

基本上有页码,应按如下方式排序:

// A1, A2, A10, B1, B3, 5, 7, 50, 72
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用默认字符串排序,那么这些将被排序为

// A1, A10, A2, B1, B3, 5, 50, 7, 72
Run Code Online (Sandbox Code Playgroud)

C#中的任何解决方案?

Joh*_*lla 17

您正在寻找Alphanum算法.幸运的是,已经存在许多实现.看到这里.

  • 如果您浏览一些代码示例,它会概述您如何更改它以适应微妙的不同场景. (2认同)

Car*_*rra 5

这就是我为我们的应用程序解决它的方式,顺序就像在windows目录中一样:

public class NaturalSortComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return StrCmpLogicalW(x, y);
    }

    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    public static extern int StrCmpLogicalW(string x, string y);
}
Run Code Online (Sandbox Code Playgroud)

用法:

  NaturalSortComparer comparer = new NaturalSortComparer();
  return comparer.Compare(string1, string2);
Run Code Online (Sandbox Code Playgroud)

但它可能不完全是你想要的:

// A1,A2,A10,B1,B3,5,7,50,72

这会给

// 5,7,50,72,A1,A2,A10,B1,B3