在 CompareTo() 覆盖中有效禁用 Sort()?
我的类的 CompareTo()
方法是动态的,范围可以从简单的比较到对多个列的比较。这一切都是在运行时确定的,而且效果很好。
但在某些情况下,我希望使用默认比较对对象集合进行排序的任何尝试都不执行任何操作。
让 CompareTo()
进行任何比较都只返回 0,令我惊讶的是,这是行不通的。该列表以某种奇怪的、看似随机的顺序重新排列。
有没有办法在 CompareTo()
方法实现中做到这一点?我不想通过重写 Sort() 在集合级别处理这个问题。
The CompareTo()
method for my class is dynamic, and can range from a simple comparison to comparisons on a number of columns. This is all determined at run time, and it works great.
But in some cases, I want any attempt to sort a collection of my objects using the default comparison to just do nothing.
Having CompareTo()
just return a 0 for any comparison, to my surprise, doesn't work. The list gets rearranged in some odd, seemingly-random order.
Is there a way to do this in the CompareTo()
method implementation? I'd rather not handle this up at the collection level by having to override Sort().
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是因为 QuickSort 不是稳定排序。我没有看到在 CompareTo 方法中解决此问题的好选择,除非您可以以某种方式获取元素的索引。
That's because QuickSort is not a stable sort. I don't see a good option to fix this in the CompareTo method unless you can somehow obtain the index of the element.
我还没有证明这一点,但作为一个建议,如果你尝试始终返回 1 或始终返回 -1 该怎么办?
I haven´t proved it, but as a suggestion, what if you try to return always 1, or always -1?
您必须重写
Sort()
。Sort()
的默认实现不保证它将如何使用CompareTo()
来获得排序的集合,因此没有任何方法可以使用它来让Sort()
做正确的事情。You have to override
Sort()
. The default implementation ofSort()
offers no guarantees about how it will useCompareTo()
to arrive at a sorted collection, so there isn't any way to use it to makeSort()
do the right thing.