Avatar billede jgp Nybegynder
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?
Avatar billede hossein Nybegynder
12. februar 2003 - 23:39 #1
Henter du værdierne fra en tabel? også vil du vise dem i 3 kolonner?
Avatar billede jgp Nybegynder
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?
Avatar billede hossein Nybegynder
13. februar 2003 - 18:15 #3
Avatar billede jgp Nybegynder
14. februar 2003 - 08:47 #4
Den sortere ganske rigtigt. Men kun classer, og kun på en kulonne.
Denne her sortere et 2 dimosional array, men også kun på en kulonne:
http://www.4guysfromrolla.com/webtech/012799-3.shtml
Avatar billede jgp Nybegynder
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..
Avatar billede jgp Nybegynder
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)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester