在 CompareTo() 覆盖中有效禁用 Sort()?

发布于 2024-08-24 12:09:22 字数 296 浏览 10 评论 0原文

我的类的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黑寡妇 2024-08-31 12:09:22

这是因为 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.

乙白 2024-08-31 12:09:22

我还没有证明这一点,但作为一个建议,如果你尝试始终返回 1 或始终返回 -1 该怎么办?

I haven´t proved it, but as a suggestion, what if you try to return always 1, or always -1?

芯好空 2024-08-31 12:09:22

您必须重写 Sort()Sort() 的默认实现不保证它将如何使用 CompareTo() 来获得排序的集合,因此没有任何方法可以使用它来让 Sort() 做正确的事情。

You have to override Sort(). The default implementation of Sort() offers no guarantees about how it will use CompareTo() to arrive at a sorted collection, so there isn't any way to use it to make Sort() do the right thing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文