首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SortedDictionary行为

SortedDictionary行为
EN

Stack Overflow用户
提问于 2009-12-28 18:09:47
回答 3查看 4.2K关注 0票数 1

我在应用程序中使用了一个SortedDictonary(字符串,字符串),并且我遇到了一种奇怪的排序行为。考虑下面的代码示例:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-28 18:36:03

在我的电话簿中,约翰·奥利里在奥莱拖拉机和丹尼斯·奥莱克之间进行了分类。您必须使用非区域性相关的排序:

代码语言:javascript
复制
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
票数 4
EN

Stack Overflow用户

发布于 2009-12-28 18:25:57

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

代码语言:javascript
复制
Dim Dic As New SortedDictionary(Of String, String)(StringComparer.Ordinal)
票数 2
EN

Stack Overflow用户

发布于 2009-12-28 18:25:17

根据默认比较器,SortedDictionary(TKey, TValue)中的每个键都必须是唯一的。

SortedDictionary(TKey,TValue)需要一个比较器实现来执行关键比较。此构造函数使用默认(依赖于本地区域性)泛型相等比较器(T).Default。如果类型TKey实现System.IComparable(T)泛型接口,则默认比较器使用该实现。或者,您可以通过使用接受比较器参数的构造函数来指定IComparer(T)泛型接口的实现。

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
'A > 
'B > 
'C > 
A > 
B > 
C > 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1968785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档