我在对带有捷克名字的数组进行排序时遇到问题。 我有这样的数组:
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"
答案 0 :(得分:9)
有趣的问题。如果您阅读documentation
在捷克-捷克共和国文化中,“ ch”是单个字符,大于“ d”。但是,在英语-美国文化中,“ ch”由两个字符组成,“ c”小于“ d”。
订购捷克字母
AÁC C D D EÉF G H Ch I J J K L M NŇOÓP Q RŘSŠTŤUÚV W X YÝZŽ
所以数组的顺序是正确的。
答案 1 :(得分:0)
我刚刚对此进行了测试:
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代码'Časrevize'ČČČ'Datum kalibrace'éééèèèêêêêêêfffyChybové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'Časrevise'ČČČ'Chybovékódy'代码'Datum kalibrace'éééèèèêêêêfffóóó
看起来Chybové中的'C'与普通的'C'是不同的字符。或者“ Ch”或“ Chy”在字母表中可能有自己的位置。但是,如果没有CultureInfo,似乎可以正确对待它,而不必考虑特殊字符。