1

我在我的应用程序中使用了 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 行为以对以'first 开头的单词进行排序?

谢谢你,CFP

4

3 回答 3

4

在我的电话簿中,John O'Leary 介于 Ole Tractors 和 Dennis Oleck 之间。您必须使用非文化相关的排序:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
于 2009-12-28T10:36:03.477 回答
2

您需要指定一个不同的比较器:

Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
于 2009-12-28T10:25:56.867 回答
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 > 
于 2009-12-28T10:25:16.510 回答