.net SortedList с StringComparer и немецким умлаутом
У меня есть SortedList с названиями улиц
Dim orderedListStreet As New Generic.SortedList(Of String, String)(StringComparer.CurrentCulture)
Возьмем, к примеру, список уже содержитHauptstrasse
"
Если я добавлюHauptstraße
", это исключение -> Key does already exist
У кого-нибудь есть идеи, как я могу добавить "Hauptstrasse
" а также "Hauptstraße
"?
1 ответ
Вы можете использовать компаратор, который считает их разными. В Германии я ожидаю, что улицы Хауптштрассе и Хауптштрассе будут одной и той же улицей, поэтому логично, что немецкая культура будет считать их равными.
Какой из них использовать, будет зависеть от ваших потребностей - самый быстрый будет StringComparer.Ordinal
или же StringComparer.OrdinalIgnoreCase
,
Если вы хотите сортировку с учетом культурных особенностей, но хотите рассматривать две разные строки, которые ваша культура считает идентичными, одним из решений будет реализация собственного компаратора, например:
int MyComparer(string x, string y)
{
var result = StringComparer.CurrentCulture.Compare(x,y);
if (result == 0) result = StringComparer.Ordinal.Compare(x,y);
return result;
}
Это сортировка основана на CurrentCulture, но разрывает связи, используя порядковый порядок сортировки (вы можете заменить это чем-то другим, если это не соответствует вашим потребностям).