当“两侧”都为数字时,如何将字母数字值排序为数字是数字吗?
我们在网格中有一些列包含数字、字符串或以数字开头的字符串,用户希望它们以合理的方式排序。 (格式取决于客户,因此我们不知道字符串的格式)
是否有 IComparable 的预封装实现可以执行类似的操作?
We have some columns in a grid that contain numbers, strings, or strings that start with a number and the users expect them to sort in a sensible way. (The format depends on the customer so we don’t know the formats the strings will be in)
Is there a pre-canned” implementation of IComparable that does something like this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一个快速的字母数字排序(也可用于其他数字排序)。
C# 字母数字排序 http://www.dotnetperls.com/alphanumeric-sorting
这是一个关于这个问题的好文章:
Sorting for Humans : Natural Sort Order http://www.codinghorror.com/ blog/2007/12/sorting-for- humans-natural-sort-order.html
这是
AlphanumComparatorFast
类,以防上述链接停止工作页面指出“它可以在任何程序中使用,没有任何限制”,并且代码开头的注释也表明它可以免费使用:here is a fast alphanumeric sort (can be used for other sorts with numerics too).
C# Alphanumeric Sorting http://www.dotnetperls.com/alphanumeric-sorting
and here is a nice article about the problem:
Sorting for Humans : Natural Sort Order http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html
Here is the
AlphanumComparatorFast
class in case the above link stops working The end of the page states "It can be used in any program with no restrictions" and the comment at the start of the code also indicates it is free for use:关于取自 http://www.dotnetperls.com/alphanumeric-sorting 的代码:解析当数字超出“int”范围时会抛出异常,这会导致我们的第三方网格工具出现异常“无法排序,因为 IComparer.Compare() 方法返回不一致的结果”。
我们更改了代码以使用decimal而不是int,并使用TryParse而不是Parse。
原始部分:
我们的版本:
Regarding the code taken from http://www.dotnetperls.com/alphanumeric-sorting: Parse will throw an Exception when the number is out of the 'int' range, this lead to exception in our third party grid tool "Unable to sort because the IComparer.Compare() method returns inconsistent results."
We changed the code to use decimal instead of int, and TryParse instead of Parse.
Original part:
Our version of it: