Efetivamente desativar Sort () dentro de um (override CompareTo)?
-
18-09-2019 - |
Pergunta
O método CompareTo()
para minha classe é dinâmico, e pode variar de uma simples comparação para comparações em um número de colunas. Isso tudo é determinada em tempo de execução, e ele funciona muito bem.
Mas em alguns casos, eu quero que qualquer tentativa de classificar uma coleção de meus objetos usando a comparação padrão para simplesmente não fazer nada.
Tendo CompareTo()
apenas retornar um 0 para qualquer comparação, para minha surpresa, não funciona. A lista é reorganizado em alguma ordem estranha, aparentemente aleatória.
Existe uma maneira de fazer isso na implementação do método CompareTo()
? Eu prefiro não lidar com isso no nível do conjunto por ter que substituir Sort ().
Solução
Isso porque QuickSort não é um estável espécie . Eu não vejo uma boa opção para corrigir isso no método CompareTo a menos que você pode de alguma forma obter o índice do elemento.
Outras dicas
Eu refúgio't provou isso, mas como uma sugestão, e se você tentar retornar sempre 1, ou sempre -1?
Você tem que substituir Sort()
. A implementação padrão de ofertas Sort()
há garantias sobre a forma como ele vai usar CompareTo()
para chegar a uma coleção ordenada, de modo que não há nenhuma maneira de usá-lo para fazer Sort()
fazer a coisa certa.