[英]SortedList<>, SortedDictionary<> and Dictionary<>
[英]SortedList/SortedDictionary weird behavior
任何人都可以解释为什么这个代码:
Dim Data As New SortedList(StringComparer.InvariantCultureIgnoreCase)
Data.Add("AB", 48)
Data.Add("AC", 48)
Data.Add("A-D", 48)
Data.Add("A-", 48)
按以下顺序生成排序列表:
A-
AB
AC
A-D
预期(逻辑上和真正想要的)订单是:
A-
A-D
AB
AC
Dim Data As New SortedList(StringComparer.InvariantCultureIgnoreCase)
我认为问题在于指定的排序规则。
将InvariantCultureIgnoreCase
更改为Ordinal
或OrdinalIgnoreCase
可解决此问题
Dim Data As New SortedList(StringComparer.OrdinalIgnoreCase)
这是Demo
这就是默认字符串比较器的实现方式。 要自定义它,您必须实现自己的自定义IComparer
或更好的兼容性覆盖Comparer<T>
类并将其传递给SortedList
构造函数或传递StringComparer.OrdinalIgnoreCase
。
你要求比较者以文化冷漠的方式行事。 这使用本地化团队认为最合适的方法,使不同文化的消费者能够理解排序。
这是非序数的,因此并非所有字符都会被自动考虑和排名。
我冒昧地猜测连字符被忽略(概念上连接单词)以进行字母排序。
您可能会建议“Ricky-Bobby”出现在“RickyBobby”之前,但本地化团队显然不同意。 所有文化中的消费者都可能理解这两个条目之间的分类无差异......而且,理解为什么两者都出现在“Ricky-Charlie”之前
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.