У меня есть класс со следующей перегрузки:VB.NET Странное поведение сортировки?
Public Overloads Function CompareTo(ByVal obj As Object) As Integer Implements IComparable.CompareTo
' I want a logmile, darn it!
If Not TypeOf obj Is Logmile Then Throw New ArgumentException
If Me("beg_logmile") > obj("beg_logmile") OrElse Me("end_logmile") > obj("end_logmile") Then
' I start or end after the other guy
Return 1
ElseIf Me("beg_logmile") < obj("beg_logmile") OrElse Me("end_logmile") < obj("end_logmile") Then
' I start or end before the other guy
return -1
Else
' Well, we must be equivalent then!
Return 0
End If
End Function
Я создаю ArrayList из следующих данных (не заказанные в то время это вход):
0.000 1.000 1.000 2.000 2.000 9.000 20.070 6.788
затем Я вызываю метод .sort() объекта ArrayList, содержащий мои объекты. Выход я получаю
0.000 1.000 1.000 2.000 20.070 6.788 2.000 9.000
Однако, если в моем compareTo
я поменять -1 и 1, я получаю следующий результат:
20.070 6.788 2.000 9.000 1.000 2.000 0.000 1.000
вуаля! Он заказан так, как я ожидаю! Просто наоборот.
Итак, вот мой вопрос: я обнаружил ошибку или просто не делаю это правильно?
Благодаря
EDIT:
Вывод - Моя логика была просто написана неправильно.
Обновленная логика:
If Me("beg_logmile") > obj("beg_logmile") OrElse Me("beg_logmile") = obj("beg_logmile") and Me("end_logmile") > obj("end_logmile") Then
' I start or end after the other guy
Return 1
ElseIf Me("beg_logmile") < obj("beg_logmile") OrElse Me("end_logmile") = obj("end_logmile") and Me("end_logmile") < obj("end_logmile") Then
' I start or end before the other guy
Return -1
Else
' Well, we must be equivalent then!
Return 0
End If
Да, данные в порядке - я фактически обновляю программу - кто-то еще собрал спецификации (внутреннее веб-приложение для использования). После разговора с клиентом, по-видимому, идет назад * * ОК, поэтому я пытаюсь разрешить «перевернутые» данные. Поэтому, видимо, я только что преодолел свою логику. –