2009-12-28 62 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)