带有重音字符的C#字符串数组orderBy问题

带有重音字符的C#字符串数组orderBy问题,c#,arrays,string,linq,C#,Arrays,String,Linq,我编写了一个小代码,其中声明了一个字符串数组,并尝试使用stringCompare和不使用stringCompare对其排序,但结果总是一样的 在使用cultureInfo的StringComparer中: var strings = new string[] { "asd", "ásd", "álm", "alm" }; var ci = CultureInfo.GetCultureInfo("hu&qu

我编写了一个小代码,其中声明了一个字符串数组,并尝试使用stringCompare和不使用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)));
CultureInfo ci = CultureInfo.GetCultureInfo("hu-HU_technl");
var comp = System.StringComparer.Create(ci, false);
var strings = new string[] { "brummm", "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item, comp)));
这两个结果都是:

alm, álm, asd, ásd
但正确的结果是:

alm, asd, álm, ásd

我做错了什么?

您可以使用
序数
字符串比较

var strings=new[]{“asd”、“ásd”、“álm”、“alm”};
WriteLine(string.Join(“,”,strings.OrderBy(item=>item,StringComparer.Ordinal));
它给你

alm、asd、阿尔姆、阿尔姆


我想我找到了解决办法。如果我将global CurrentCulture设置为“hu”或“hu-hu”,则单词的显示顺序不正确,但我发现匈牙利语有一种额外的文化:“hu-hu_technl”

链接:

代码:

结果:alm、asd、álm、ásd、brummm

您也可以使用StringComparer实现这一点:

var strings = new string[] { "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item)));
CultureInfo ci = CultureInfo.GetCultureInfo("hu-HU_technl");
var comp = System.StringComparer.Create(ci, false);
var strings = new string[] { "brummm", "asd", "ásd", "álm", "alm" };
Console.WriteLine(string.Join(", ", strings.OrderBy(item => item, comp)));

我不懂匈牙利语,但似乎使用了不同的排序规则。表示a和á是共排序的:“虽然带有变音标记的字符被视为单独的字母,但在对单词排序时,只有长度不同的元音被视为相同的。因此,例如,O/Ó和Ö/Ő对在排序上没有区别,而是Ö跟在O后面。”。OTOH,SQL Server有100多个匈牙利语排序规则。您可以回答自己的问题,而不是将解决方案添加到您的答案中。谢谢您正确的评论。我修改了它:)这复制了OP给出的例子,但我仍然不确定Péter所说的“正确结果”到底是什么意思:一些不同的词汇排序,或者实际上是顺序排序。@KlausGütter是的,正如你所写的。顺序比较不能解决我的问题。匈牙利ABC看起来像这样:a-á-b-c。。。。。顺序比较器从以下字符串生成:alm、asd、álm、ásd。但如果我添加一个新的字符串示例:“bab”,那么结果将是:alm,asd,bab,álm,ásdfoundthesolution。更新了我的问题。谢谢你们的帮助