12. februar 2003 - 14:38Der 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
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?
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..
'** 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
'** 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
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.