SortedDictionary行为

时间:2009-12-28 10:09:47

标签: vb.net sorting sorteddictionary

我在我的应用程序中使用了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

3 个答案:

答案 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 >