2010-03-09 14 views
6

El método CompareTo() para mi clase es dinámico, y puede ir desde una simple comparación hasta comparaciones en varias columnas. Todo esto se determina en tiempo de ejecución y funciona de maravilla.¿Desactivar efectivamente Sort() dentro de una anulación CompareTo()?

Pero en algunos casos, deseo cualquier intento de ordenar una colección de mis objetos usando la comparación predeterminada para no hacer nada.

Tener CompareTo() acaba de devolver un 0 para cualquier comparación, para mi sorpresa, no funciona. La lista se reorganiza en un orden extraño, aparentemente aleatorio.

¿Hay alguna manera de hacerlo en la implementación del método CompareTo()? Prefiero no manejar esto en el nivel de colección al tener que anular Sort().

Respuesta

1

Eso es porque QuickSort no es un stable sort. No veo una buena opción para arreglar esto en el método CompareTo a menos que de alguna manera pueda obtener el índice del elemento.

+0

Gracias, tiene perfecto sentido. Esperaba que ese fuera el caso, pero la clase de Algoritmos de Datos fue hace tanto tiempo ... – richardtallent

0

No lo he probado, pero como sugerencia, ¿qué pasa si intentas devolver siempre 1, o siempre -1?

+2

Esto infringe las propiedades del método CompareTo: Si A.CompareTo (B) devuelve un valor distinto de cero, se requiere B.CompareTo (A) para devolver un valor del signo opuesto. –

+0

Entendido. Gracias @Kevin – Javier

0

Tiene que anular Sort(). La implementación predeterminada de Sort() no ofrece garantías sobre cómo usará CompareTo() para llegar a una colección ordenada, por lo que no hay forma de usarla para hacer que Sort() haga lo correcto.