0
我有一類具有以下過載: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
然後我調用包含我的對象的ArrayList的.sort()方法。我得到的輸出是
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
瞧!它以我期望的方式排列!恰好相反。
所以,這裏是我的問題:我發現了一個錯誤,或者我只是不正確嗎?
感謝
編輯:
結論 - 我的邏輯是剛剛寫的不對。
更新邏輯:
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
是的,數據是確定的 - 我實際上正在更新程序 - 別人已經收集了規格(內部使用的Web應用程序)。在與客戶交談後,顯然後退*是*好,所以我試圖允許「反向」數據。所以顯然我剛剛得到了我的邏輯。 – 2010-06-22 19:34:50