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

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

C# 的OrderBy()函数的排序问题昨天在客户现场遇到一个很奇葩的问题,猜下下面代码的排序输出是什么:

static void Main(){ List<string> strs = new List<string>(){"11", "12", "1:"}; foreach(string str in strs.OrderBy(n => n)) Console.writeLine(str);}

是这个么:

11121:

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

1:1112

为什么?冒号的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#排序输出结果不一致。哪位熟悉CLR的博友可以告诉我原因么?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航