【发布时间】:2020-11-05 07:57:18
【问题描述】:
我写了一个小代码来声明一个字符串数组,我尝试使用和不使用 stringCompare 对其进行排序,但结果始终相同。
在我使用cultureInfo的地方使用StringComparer:
var strings = new string[] { "asd", "ásd", "álm", "alm" };
var ci = CultureInfo.GetCultureInfo("hu");
var comp = StringComparer.Create(ci, false);
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item, comp)));
没有StringComparer:
var strings = new string[] { "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item)));
两个结果都是:
alm, álm, asd, ásd
但正确的结果是:
alm, asd, álm, ásd
我做错了什么?
【问题讨论】:
-
我不会匈牙利语,但似乎使用了不同的排序规则。 Wikipedia 说 a 和 á 是共同排序的:“虽然带有变音符号的字符被认为是单独的字母,但在排序单词时,仅长度不同的元音被视为相同。因此,例如,对 O/Ó 和Ö/Ő在排序上没有区别,但Ö跟在O之后。”。 OTOH,SQL Server 有超过 100 个匈牙利语排序规则。
-
您可以回答自己的问题,而不是将解决方案添加到您的答案中。
-
感谢您的正确评论。我修改了它:)