我在我的应用程序中使用了SortedDictonary(Of String,String),我遇到了奇怪的排序行为。请考虑以下代码示例:
Dim Dic As New SortedDictionary(Of String, String)
Dic.Add("'A", "")
Dic.Add("A", "")
Dic.Add("'B", "")
Dic.Add("B", "")
Dic.Add("'C", "")
Dic.Add("C", "")
我希望将键分类为“'A”,“'B”,“'C”,“A”,“B”,“C”,这是你在比较键时得到的“手“,通过<运营商。然而,迭代键会返回“A”,“A”,“B”,“B”,“C”,“C”。
如何更改SortedDictionary行为以首先对以'
开头的单词进行排序?
谢谢你, CFP
答案 0 :(得分:4)
在我的电话簿中,John O'Leary在Ole Tractors和Dennis Oleck之间进行了分类。您将不得不使用非文化相关的排序:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
答案 1 :(得分:2)
您需要指定不同的比较器:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
答案 2 :(得分:0)
根据默认比较器,SortedDictionary(TKey, TValue)中的每个键必须是唯一的。
SortedDictionary(TKey,TValue)需要比较器实现来执行密钥比较。此构造函数使用默认(本地文化相关)通用相等比较器Comparer(T).Default。如果类型TKey实现System.IComparable(T)泛型接口,则默认比较器使用该实现。或者,您可以使用接受比较器参数的构造函数指定IComparer(T)泛型接口的实现。
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
Dic.Add("'A", "")
Dic.Add("A", "")
Dic.Add("'B", "")
Dic.Add("B", "")
Dic.Add("'C", "")
Dic.Add("C", "")
For Each Item As KeyValuePair(Of String, String) In Dic
Console.WriteLine(Item.Key & " > " & Item.Value)
Next
输出:
'A >
'B >
'C >
A >
B >
C >