我有一个带街道名称的SortedList
Dim orderedListStreet As New Generic.SortedList(Of String, String)(StringComparer.CurrentCulture)
以Lets为例,该列表已包含“Hauptstrasse
”
如果我添加“Hauptstraße
”,则会抛出异常 - > Key does already exist
有没有人知道如何添加“Hauptstrasse
”和“Hauptstraße
”?
答案 0 :(得分:5)
您可以使用认为它们不同的比较器。在德国,我希望Hauptstrasse和Hauptstraße成为同一条街,所以德国文化认为它们是平等的是合乎逻辑的。
使用哪一个取决于您的需求 - 最快的将是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的排序,但是使用序数排序来断开关系(如果它不符合您的需要,您可以用其他东西替换它)。