关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

C#默认OrderBy()函数的排序问题

发布时间:2020-02-05 18:49:48

猜下下面代码的排序输出是什么:


static void Main()

{

    List<string> strs = new List<string>(){"11", "12", "1:"};

    foreach(string str in strs.OrderBy(n => n))

        Console.writeLine(str);

}

是这个么:


11

12

1:


No, No, No。实际输出了这个:


1:

11

12


为什么?冒号的ASCII码值不是在0~9的后面么?我也没搞懂为什么C#的默认Sorter是按照这个顺序排序的。好在OrderBy()函数支持自定义Sorter,像下面一样修改下就行了。


static void Main()

{

    OrdinalComparer comp = new OrdinalComparer();


    List<string> strs = new List<string>(){"11", "12", "1:"};

    foreach(string str in strs.OrderBy(n => n, comp))

        Console.writeLine(str);

}


public class OrdinalComparer: System.Collections.Generic.IComparer<String>

{

    public int Compare(String x, String y)

    {

        return string.CompareOrdinal(x, y);

    }  

}

不过还是不知道为什么OrderBy的默认排序要设置成这样,Python2.3的默认排序就是按ASCII码排的。这导致我和别人写了同一个算法,结果python和C#排序输出结果不一致。



/template/Home/Zkeys/PC/Static