Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET奇怪的排序行为?_Vb.net_Sorting_Arraylist - Fatal编程技术网

VB.NET奇怪的排序行为?

VB.NET奇怪的排序行为?,vb.net,sorting,arraylist,Vb.net,Sorting,Arraylist,我有一个重载如下的类: 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("be

我有一个重载如下的类:

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
瞧!这是按我期望的方式订购的!正好相反

所以我的问题是:我是否发现了一个bug,或者我只是做得不对

谢谢

编辑:

结论——我的逻辑写错了

更新的逻辑:

        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
如果我(“beg_logmile”)>obj(“beg_logmile”)或我(“beg_logmile”)=obj(“beg_logmile”)和我(“end_logmile”)>obj(“end_logmile”),那么
“我跟在另一个人后面开始或结束
返回1
如果我(“beg_logmile”)
我不知道你是否做错了,因为我不知道这些里程记录是什么意思(见我的下一段)。至少我能指出你看到的行为。在第一个.sort()调用中,首先比较第一个数字(让我们看看问题2.000和20.070中的行)。2.000不大于20.070,这等于false,但OrElse等于true(9.000>6.788),并且返回1


您确定您的输入数据正常吗?我把这读作开始英里和结束英里。你如何从20.070英里开始,到6.788英里结束(向后走?)。如果数据是坏的,那么您的函数可能是好的。除此之外,您可能只想重点比较一列或另一列。

是的,数据还可以-我实际上正在更新程序-其他人已经收集了规格(一个内部使用的web应用程序)。在与客户交谈之后,显然后退是可以的,所以我尝试允许“反向”数据。所以很明显,我的逻辑是错的。 0.000 1.000 1.000 2.000 20.070 6.788 2.000 9.000 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