对章节内容进行排序,如14.1.2.3和14.10.1.2.3.4

Har*_*rry 8 c# linq sorting

我有各种不同深度的章节.

所以有14.1和14.4.2和14.7.8.8.2等等.

字母数字排序14.10将出现在14.2之前.那很糟.应该在14.9之后.

是否有一种简单的方法来排序theese,而不添加前导零?用linq?

Jon*_*nna 7

public class NumberedSectionComparer : IComparer<string>
{
  private int Compare(string[] x, string[]y)
  {
    if(x.Length > y.Length)
      return -Compare(y, x);//saves needing separate logic.
    for(int i = 0; i != x.Length; ++i)
    {
      int cmp = int.Parse(x[i]).CompareTo(int.Parse(y[i]));
      if(cmp != 0)
        return cmp;
    }
    return x.Length == y.Length ? 0 : -1;
  }
  public int Compare(string x, string y)
  {
    if(ReferenceEquals(x, y))//short-cut
      return 0;
    if(x == null)
      return -1;
    if(y == null)
      return 1;
    try
    {
      return Compare(x.Split('.'), y.Split('.'));
    }
    catch(FormatException)
    {
      throw new ArgumentException();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)