日期:2014-05-17  浏览次数:20776 次

遇见了一个字符及字符串大小的问题
本帖最后由 lulupiaoxu 于 2013-12-05 11:43:15 编辑
我一直以为字符串的大小对比是从头到尾逐个比较的。。。
直到现在才发现了问题
好像大写的字母和小写的字母在排序的时候会受到他们后面的字符的影响?
难道大写的字母和小写的字母编码是一样的吗
有没有人知道这是什么情况啊
List<string> aa = new List<string>();
List<string> bb = new List<string>();
List<string> cc = new List<string>();
aa.Add("Vafi");
aa.Add("vdsg");
bb.Add("Vsds");
bb.Add("vfdd");
cc.Add("V");
cc.Add("v");
aa.Sort();
bb.Sort();
cc.Sort();
foreach (var a in aa)
{
    Console.WriteLine(a);
}
Console.WriteLine("===========");
foreach (var b in bb)
{
    Console.WriteLine(b);
}
Console.WriteLine("===========");
foreach (var c in cc)
{
    Console.WriteLine(c);
}
Console.WriteLine("===========");

运行的结果是这个样子的


单独排序V比v大
但是如果V和v后面有字符,字符串的大小好像就由v和V后面的字符来决定了

------解决方案--------------------
默认的排序规则跟当前的文化(Thread.CurrentThread.CurrentCulture)有关系。
一种文化中包括了如何比如字符,(比如按笔划,按拼音排等)。

如果要用内码排(即#1 bdmh说的‘asicc’码),可以用StringComparer.Ordinal:
aa.Sort(StringComparer.Ordinal);
bb.Sort(StringComparer.Ordinal);
cc.Sort(StringComparer.Ordinal);

具体可阅读下帖的讨论(3楼,4楼):
http://bbs.csdn.net/topics/390438931