我在应用程序中使用了一个SortedDictonary(字符串,字符串),并且我遇到了一种奇怪的排序行为。考虑下面的代码示例:
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
发布于 2009-12-28 18:36:03
在我的电话簿中,约翰·奥利里在奥莱拖拉机和丹尼斯·奥莱克之间进行了分类。您必须使用非区域性相关的排序:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)发布于 2009-12-28 18:25:57
您需要指定不同的比较器:
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)发布于 2009-12-28 18:25:17
根据默认比较器,SortedDictionary(TKey, TValue)中的每个键都必须是唯一的。
SortedDictionary(TKey,TValue)需要一个比较器实现来执行关键比较。此构造函数使用默认(依赖于本地区域性)泛型相等比较器(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 > https://stackoverflow.com/questions/1968785
复制相似问题