12. februar 2003 - 14:38
Der er
5 kommentarer og
1 løsning
Sortering af 2-dimsional array, på 3 kulonner
Hej,
Jeg har et 2 dimsional array som ser sådan her ud:
myArr(Type,x)
myArr(UserID,x)
myArr(Dato,x)
Der er X antal rækker.
Jeg har skrevet en function, som sortere på en kulonner. (Lad mig vide hvis i er intereseret i at se den).
Det jeg godt, kunne tænke mig, var en function der sorteret på Type, UserID, Dato. Sådan her:
Type UserID Dato
1 1 13-12-2003
1 2 14-12-2003
1 3 15-12-2003
2 1 11-12-2003
2 2 17-12-2003
Nogle der kan hjælpe?
13. februar 2003 - 08:52
#2
Nej værdierne bliver ikke hentet fra en tabel.
De 3 værdier, skal bruges hver for sig. Tænker du på at lave en string ud af de 3 kulonner og så sorter på den string?
14. februar 2003 - 09:24
#5
Arbejder på en løsning, hvor den FOR løkke den danner det 2 dimonsionale array bliver sorteret som ønsket. Tager lidt tid, da jeg bliver nød til at teste flere ting for at være sikre på det virker..
21. februar 2003 - 15:39
#6
Det løkkes:
'** Sort any 2 dimensional array by the first 3 colums. Array looking like MyArr(Columns, Rows) **'
Function DoubleSorter(byRef arrArray)
Dim ColmunLenght, row,i , j, StartingValues(), NewStartingValues(), swap_pos
'** Column-Lenght of array **'
ColmunLenght = UBound(arrArray, 1)
ReDim StartingValues(ColmunLenght): ReDim NewStartingValues(ColmunLenght)
'** Start outer loop **'
For row = 0 To UBound(arrArray, 2)
'Take a snapshot of the first element in the array because if there is a
'smaller value elsewhere in the array we'll need to do a swap.
For i = 0 To ColmunLenght
StartingValues(i) = arrArray(i, row)
Next
' Default the Starting values to the First Record
For i = 0 To ColmunLenght
NewStartingValues(i) = arrArray(i, row)
Next
swap_pos = row
'** Start inner loop **'
For j = row + 1 to UBound(arrArray, 2)
swap = false
If arrArray(0, j) < NewStartingValues(0) Then
swap = true
ElseIf arrArray(0, j) = NewStartingValues(0) Then
If arrArray(1, j) < NewStartingValues(1) Then
swap = true
ElseIf arrArray(1, j) = NewStartingValues(1) Then
If arrArray(2, j) < NewStartingValues(2) Then
swap = true
End If
End If
End If
If swap then
'This is now the lowest number - remember it's position.
swap_pos = j
For i = 0 To ColmunLenght
NewStartingValues(i) = arrArray(i, j)
Next
End If
Next
If swap_pos <> row Then
'If we get here then we are about to do a swap within the array.
'** Set new starting values **'
For i = 0 To ColmunLenght
arrArray(i, swap_pos) = StartingValues(i)
Next
'** Set swapped values **'
For i = 0 To ColmunLenght
arrArray(i, row) = NewStartingValues(i)
Next
End If
Next
End Function
'** Print array **'
Function printArray(myArr)
Response.Write "<table border=1>"
For i = 0 To UBound(myArr,2)
Response.Write "<tr>"
For j = 0 To UBound(myArr,1)
Response.Write "<td>"
Response.Write myArr(j,i)
Response.Write "</td>"
Next
Response.Write "</tr>"
Next
Response.Write "</table>"
End Function
Randomize
Dim theArray(2,9)
'** Create array **'
For i = 0 To UBound(theArray,2)
For j = 0 To UBound(theArray,1)
theArray(j,i) = Int((3 * rnd) + 1)
Next
Next
Call printArray(theArray)
Call DoubleSorter(theArray)
Call printArray(theArray)