博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#默认OrderBy()函数的排序问题
阅读量:7036 次
发布时间:2019-06-28

本文共 926 字,大约阅读时间需要 3 分钟。

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

static void Main(){    List
strs = new List
(){
"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
strs = new List
(){
"11", "12", "1:"}; foreach(string str in strs.OrderBy(n => n, comp)) Console.writeLine(str);}public class OrdinalComparer: System.Collections.Generic.IComparer
{ public int Compare(String x, String y) { return string.CompareOrdinal(x, y); } }

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

转载于:https://www.cnblogs.com/dalianliyan/p/4490509.html

你可能感兴趣的文章
Microsoft Remote Desktop移动客户端Q&A
查看>>
SCVMM 2012 R2---安装SCVMM 2012 R2服务器
查看>>
SANS:2014年安全分析与安全智能调研报告
查看>>
WYSE率先支持RemoteFX功能
查看>>
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds...
查看>>
MotoRola MT870 ROOT及刷机方法
查看>>
Skype for Business Server 2015-04-前端服务器-7-部署
查看>>
计算机应用专业的学生应该掌握的IT技能
查看>>
【VMCloud云平台】SCDPM(六)额外篇-DPM备份到Azure上
查看>>
新态势感知系列(1):从态势感知到全方位态势感知
查看>>
查看OSSIM系统帮助
查看>>
剧情很有趣:安全专家被骗记
查看>>
LVS+Heartbeat
查看>>
修改Linux机器名
查看>>
数组面试题-子数组之和
查看>>
Sqlserver 2005 配置 数据库镜像:镜像状态
查看>>
[C#][控件]高级控件
查看>>
WTL学习笔记(4)控件加强
查看>>
Create and Alter View
查看>>
项目管理的“三边六拍”!
查看>>