3

我有一个带有街道名称的 SortedList

Dim orderedListStreet As New Generic.SortedList(Of String, String)(StringComparer.CurrentCulture)

举个例子,列表已经包含“ Hauptstrasse

如果我添加“ Hauptstraße”,它会引发异常->Key does already exist

有谁知道如何添加“ Hauptstrasse”和“ Hauptstraße”?

4

1 回答 1

5

您可以使用认为它们不同的比较器。在德国,我希望 Hauptstrasse 和 Hauptstraße 是同一条街道,因此德国文化将它们视为平等是合乎逻辑的。

使用哪一个将取决于您的需求 - 最快的是StringComparer.OrdinalStringComparer.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,但使用序数排序打破关系(如果它不满足您的需求,您可以用其他东西替换它)。

于 2013-11-05T12:28:52.147 回答