如果我执行以下语句:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
结果为“-1”,表示“mun”的数值小于“mün”。
但是,如果我执行此语句:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
我得到“1”,表示“Muntelier, Schewiz”应该排在最后。
这是比较中的错误吗?或者,更有可能的是,在对包含重音的字符串进行排序时,我应该考虑一个规则
这是一个问题的原因是,我正在对列表进行排序,然后进行手动二进制过滤器,这意味着每个字符串都以“xxx”开头。
以前我使用的是 Linq 'Where' 方法,但现在我必须使用另一个人编写的这个自定义函数,因为他说它性能更好。
但是自定义函数似乎没有考虑 .NET 的任何“unicode”规则。因此,如果我告诉它按“mün”过滤,它不会找到任何项目,即使列表中有以“mun”开头的项目。
这似乎是因为重音字符的顺序不一致,具体取决于重音字符后面的字符。
好的,我想我已经解决了这个问题。
在过滤器之前,我根据每个字符串的前n 个字母进行排序,其中n是搜索字符串的长度。