猜下下面代码的排序输出是什么:
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#排序输出结果不一致。
Copyright © 2004-2024 Ynicp.com 版权所有 法律顾问:建纬(昆明)律师事务所 昆明市网翼通科技有限公司 滇ICP备08002592号-4