SortedDictionary behavior
问题描述:
我在应用程序中使用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
答
在我的电话本,约翰·奥利里各种各样奥莱拖拉机和丹尼斯之间Oleck。你将不得不使用非文化相关排序:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
答
在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 >
答
你需要指定不同的比较器:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
的确,我没有想到这一点。非常感谢! – 2009-12-28 11:21:24