排序二维数组asp经典

时间:2014-02-24 20:39:09

标签: asp-classic

所以我有一个我要排序的二维数组。我可以在一维时轻松排序。 我希望你能帮助我们。

这是我的数据。

top5(0,0) = Greeting
top5(0,1) = 2
top5(1,0) = VerifyingInformation
top5(1,1) = 5
top5(2,0) = Calibration
top5(2,1) = 4

我可以排序一维时没问题。 我正在使用这个代码一维。

For i = LBound(top5) to UBound(top5)
         For j = LBound(top5) to UBound(top5) - 1
              If top5(j,1) < top5(j + 1,1) Then
                 TempValue = top5(j + 1,1)
                 top5(j + 1,1) = top5(j,1)
                 top5(j,1) = TempValue
              End If
            next
        Next

我想要的结果就是这个。

VerifyingInformation 5
Calibration 4
Greeting 2

3 个答案:

答案 0 :(得分:2)

这适用于我

function sort_arr_mult(byref ArrTmp, ordPlace)
    ' ordPlace - the place of the order value in the array
    ' create the new array
    Redim arrRet (Ubound(ArrTmp, 1), Ubound(ArrTmp, 2))

for j = 0 to Ubound(ArrTmp, 2)
    orderVal = ArrTmp(ordPlace, j)

    if j = 0 then ' first enter insert to first column
        for i = 0 to Ubound(ArrTmp, 1)
            arrRet(i, j) = ArrTmp(i, j)
        next
    else            
        ' check the first value if smaller or equal
        ' move the columnbs one field up
        ' at the end insert to currenct column
        for k = 0 to Ubound(arrRet, 2)
            if isEmp(arrRet(0, k)) then ' if empty fied the column                  
                for i = 0 to Ubound(arrRet, 1)
                    arrRet(i, k) = ArrTmp(i, j)
                next

                exit for
            else
                if orderVal<=arrRet(ordPlace, k) then                       
                    for x = Ubound(arrRet, 2) to k+1 step -1                            
                        for i = 0 to Ubound(arrRet, 1)
                            arrRet(i, x) = arrRet(i, x-1)
                        next
                    next

                    for i = 0 to Ubound(arrRet, 1)
                        arrRet(i, k) = ArrTmp(i, j)
                    next

                    exit for
                end if
            end if
        next ' for k = 0 to Ubound(arrRet, 2)
    end if
next

sort_arr_mult = arrRet
end function

答案 1 :(得分:1)

看起来你实际上正在执行一维数值的数字值以及相关的文本字符串。

您的示例代码已关闭,但您需要2个临时值来表示您将要转移的数组值。

       For i = LBound(top5) to UBound(top5)
            For j = LBound(top5) to UBound(top5) - 1
              If top5(j,1) < top5(j + 1,1) Then
                 TempValue = top5(j + 1,1)
                 TempText = top5(j + 1,0)
                 top5(j + 1,1) = top5(j,1)
                 top5(j + 1,0) = top5(j,0)
                 top5(j,1) = TempValue
                 top5(j,0) = TempText
              End If
            Next
       Next

答案 2 :(得分:0)

使用第3个参数扩展raamanswer作为排序方向“ASC”或“DESC”

Function sortArrayMulti(byref ArrTmp, ordPlace, so) 
''so: sortorder "ASC" or "DESC"
Dim j, i, k, orderVal, x
Redim arrRet(Ubound(ArrTmp, 1), Ubound(ArrTmp, 2))
for j = 0 To Ubound(ArrTmp, 2)
    orderVal = ArrTmp(ordPlace, j)
    if j = 0 Then
        for i = 0 to Ubound(ArrTmp, 1)
            arrRet(i, j) = ArrTmp(i, j)
        next
    else
        for k = 0 to Ubound(arrRet, 2)
            if isEmpty(arrRet(0, k)) then
                for i = 0 to Ubound(arrRet, 1)
                    arrRet(i, k) = ArrTmp(i, j)
                next
                exit for
            else
                if so = "ASC" then
                    if orderVal <= arrRet(ordPlace, k) then
                        for x = Ubound(arrRet, 2) to k + 1 step -1
                            for i = 0 to Ubound(arrRet, 1)
                                arrRet(i, x) = arrRet(i, x - 1)
                            next
                        next
                        for i = 0 to Ubound(arrRet, 1)
                            arrRet(i, k) = ArrTmp(i, j)
                        next
                        exit for
                    end if
                else
                    if orderVal >= arrRet(ordPlace, k) then
                        for x = Ubound(arrRet, 2) to k + 1 step -1
                            for i =  Ubound(arrRet, 1) to 0 step -1
                                arrRet(i, x) = arrRet(i, x - 1)
                            next
                        next
                        for i = 0 to Ubound(arrRet, 1)
                            arrRet(i, k) = ArrTmp(i, j)
                        next
                        exit for
                    end if
                end if
            end if
        next
    end if
next
sortArrayMulti = arrRet
End Function