2009-12-28 61 views
1

我在应用程序中使用SortedDictonary(Of String,String),并且遇到奇怪的排序行为。考虑下面的代码例如:SortedDictionary behavior

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

回答

4

在我的电话本,约翰·奥利里各种各样奥莱拖拉机和丹尼斯之间Oleck。你将不得不使用非文化相关排序:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal) 
+1

的确,我没有想到这一点。非常感谢! – 2009-12-28 11:21:24

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 > 
1

你需要指定不同的比较器:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)