Если я выполню следующий оператор:
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
Результат равен «-1», что указывает на то, что «мун» имеет меньшее числовое значение, чем «мюн».
Однако, если я выполню этот оператор:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
Я получаю «1», что указывает на то, что «Мунтелье, Шевиз» должно идти последним.
Это ошибка в сравнении? Или, что более вероятно, есть ли правило, которое я должен учитывать при сортировке строк, содержащих акцентированные
Причина, по которой это проблема, заключается в том, что я сортирую список, а затем выполняю ручной двоичный фильтр, который предназначен для получения каждой строки, начинающейся с «xxx».
Раньше я использовал метод «Где» Linq, но теперь мне приходится использовать эту пользовательскую функцию, написанную другим человеком, потому что, по его словам, она работает лучше.
Но пользовательская функция, похоже, не принимает во внимание любые правила «юникода», которые есть в .NET. Поэтому, если я скажу ему фильтровать по «mün», он не найдет никаких элементов, даже если в списке есть элементы, начинающиеся с «mun».
По-видимому, это происходит из-за непоследовательного порядка символов с акцентом в зависимости от того, какие символы идут после символа с акцентом.
Хорошо, я думаю, что исправил проблему.
Перед фильтром я делаю сортировку по первым n буквам каждой строки, где n — длина строки поиска.