.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, но разрывает связи, используя порядковый порядок сортировки (вы можете заменить это чем-то другим, если это не соответствует вашим потребностям).

Другие вопросы по тегам