Эффективно отключить Sort () в переопределении CompareTo ()? - PullRequest
6 голосов
/ 10 марта 2010

Метод CompareTo() для моего класса является динамическим и может варьироваться от простого сравнения до сравнения по ряду столбцов. Все это определяется во время выполнения и прекрасно работает.

Но в некоторых случаях я хочу, чтобы любая попытка отсортировать коллекцию моих объектов с использованием сравнения по умолчанию просто ничего не делала.

Наличие CompareTo() просто возвращает 0 для любого сравнения, к моему удивлению, не работает. Список переупорядочен в каком-то странном, казалось бы, случайном порядке.

Есть ли способ сделать это в реализации метода CompareTo()? Я бы предпочел не обрабатывать это на уровне коллекции, поскольку пришлось бы переопределять Sort ().

Ответы [ 3 ]

1 голос
/ 10 марта 2010

Это потому, что QuickSort не является стабильной сортировкой . Я не вижу хорошей возможности исправить это в методе CompareTo, если вы не можете каким-то образом получить индекс элемента.

0 голосов
/ 10 марта 2010

Вы должны переопределить Sort(). Реализация по умолчанию Sort() не дает никаких гарантий относительно того, как она будет использовать CompareTo() для получения отсортированной коллекции, поэтому нет никакого способа использовать ее, чтобы заставить Sort() делать правильные вещи.

0 голосов
/ 10 марта 2010

Я не доказал это, но как совет, что если вы попытаетесь вернуть всегда 1 или всегда -1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...