c# 在捷克语中对数组进行排序

c# Sorting array in Czech

我在对包含捷克名字的数组进行排序时遇到问题。 我有这样的数组:

    var myList = new[]
    {
        "Čas revize", "Datum kalibrace", "Chybové kódy"
    };

并尝试这样排序:

CultureInfo culture = new CultureInfo("cs-CZ");
var result = myList.OrderBy(x => x, StringComparer.Create(culture, true));

所以我希望数据排序如下:

"Čas revize", "Chybové kódy", "Datum kalibrace"

但它以不同的顺序结束:

"Čas revize", "Datum kalibrace", "Chybové kódy"

有趣的问题。如果您阅读 documentation

In Czech - Czech Republic culture, "ch" is a single character that is greater than "d". However, in English - United States culture, "ch" consists of two characters, and "c" is less than "d".

捷克字母是有序的

A​​ Á B C Ç D Ď E É Ě F G H Ch I Í J K L M N Ç O Ó P Q R Ø S Š T Ť U Ú Ů V W X Y Ý Z Ž

所以你的数组顺序是正确的。

我刚刚测试了这个:

List<string> myList = new List<string> { "Čas revize", "Datum kalibrace", "Chybové kódy", "óóó", "ČČČ", "aaa", "ééé", "èèè", "êêê", "fff", "Code" };
CultureInfo culture = new CultureInfo ("cs-CZ");
List<string> result = myList.OrderBy (x => x, StringComparer.Create (culture, true)).ToList ();

得到结果:

aaa Code 'Čas revize' ČČČ 'Datum kalibrace' ééé èèè êêê fff Chybové kódy óóó

然后我测试了这个:

List<string> myList = new List<string> { "Čas revize", "Datum kalibrace", "Chybové kódy", "óóó", "ČČČ", "aaa", "ééé", "èèè", "êêê", "fff", "Code" };
List<string> result = myList.OrderBy (j => j).ToList ();

得到这个结果:

aaa 'Čas revize' ČČČ 'Chybové kódy' Code 'Datum kalibrace' ééé èèè êêê fff óóó

这是因为在捷克语中 'Ch' 在字母表中位于 'H' 之后和 'I' 之前。但是如果没有 CultureInfo,它似乎可以正确处理它,而不管特殊字符。