Avatar billede hh_appel Nybegynder
20. november 2001 - 07:46 Der er 4 kommentarer og
1 løsning

Sortere array

Jeg har et array med 3 informationer:
navn, nummer og kategori.

Jeg skal have sorteret disse efter nummer. Den bubblesort jeg har liggende sorterer kun 2 felter - dvs kategorien ikke bliver sorteret med...

Er der nogen der har en sorteringsrutine, der kan tage alle tre felter med?
Avatar billede bobbedude Nybegynder
20. november 2001 - 07:52 #1
lytter>>
Avatar billede netsrac Praktikant
20. november 2001 - 07:52 #2
Vi kan vel bare udbygge den du har, prøv at lig koden her så skal jeg se hvad jeg kan gøre.
Avatar billede hh_appel Nybegynder
20. november 2001 - 08:28 #3
Sub DualSorter( byRef arrArray, DimensionToSort )
    Dim row, j, StartingKeyValue, StartingOtherValue, _
        NewStartingKey, NewStartingOther, _
        swap_pos, OtherDimension
    Const column = 1
   
    \' Ensure that the user has picked a valid DimensionToSort
    If DimensionToSort = 1 then
        OtherDimension = 0
    ElseIf DimensionToSort = 0 then
        OtherDimension = 1
    Else
        \'Shoot, invalid value of DimensionToSort
        Response.Write \"Invalid dimension for DimensionToSort: \" & _
                      \"must be value of 1 or 0.\"
        Response.End
    End If
   
    For row = 0 To UBound( arrArray, column ) - 1
    \'Start outer loop.
   
        \'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.
        StartingKeyValue = arrArray ( row, DimensionToSort )
        StartingOtherValue = arrArray ( row, OtherDimension )
       
        \' Default the Starting values to the First Record
        NewStartingKey = arrArray ( row, DimensionToSort )
        NewStartingOther = arrArray ( row, OtherDimension )
       
        swap_pos = row
       
        For j = row + 1 to UBound( arrArray, column )
        \'Start inner loop.
            If arrArray ( j, DimensionToSort ) < NewStartingKey Then
            \'This is now the lowest number -
            \'remember it\'s position.
                swap_pos = j
                NewStartingKey = arrArray ( j, DimensionToSort )
                NewStartingOther = arrArray ( j, OtherDimension )
            End If
        Next
       
        If swap_pos <> row Then
        \'If we get here then we are about to do a swap
        \'within the array.
            arrArray ( swap_pos, DimensionToSort ) = StartingKeyValue
            arrArray ( swap_pos, OtherDimension ) = StartingOtherValue
           
            arrArray ( row, DimensionToSort ) = NewStartingKey
            arrArray ( row, OtherDimension ) = NewStartingOther
           
        End If   
    Next
End Sub
Avatar billede eagleeye Praktikant
20. november 2001 - 09:10 #4
Denne har 3 dimentioner med, jeg har taget din kode og skrevet lidt om/til:



Sub DualSorter( byRef arrArray, DimensionToSort )
Dim row, j, StartingKeyValue, StartingOtherValueA, StartingOtherValueB, _
NewStartingKey, NewStartingOtherA, NewStartingOtherB, _
swap_pos, OtherDimensionA, OtherDimensionB
Const column = 1

\' Ensure that the user has picked a valid DimensionToSort
If DimensionToSort = 2 then
  OtherDimensionA = 0
  OtherDimensionB = 1
ElseIf DimensionToSort = 1 then
  OtherDimensionA = 0
  OtherDimensionB = 2
ElseIf DimensionToSort = 0 then
  OtherDimensionA = 1
  OtherDimensionB = 2
Else
  \'Shoot, invalid value of DimensionToSort
  Response.Write \"Invalid dimension for DimensionToSort: \" & _
  \"must be value of 2, 1 or 0.\"
Response.End
End If

For row = 0 To UBound( arrArray, column ) - 1
  \'Start outer loop.
  \'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.
  StartingKeyValue = arrArray ( row, DimensionToSort )
  StartingOtherValueA = arrArray ( row, OtherDimensionA )
  StartingOtherValueB = arrArray ( row, OtherDimensionB )

  \' Default the Starting values to the First Record
  NewStartingKey = arrArray ( row, DimensionToSort )
  NewStartingOtherA = arrArray ( row, OtherDimensionA )
  NewStartingOtherB = arrArray ( row, OtherDimensionB )

  swap_pos = row

  For j = row + 1 to UBound( arrArray, column )
    \'Start inner loop.
    If arrArray ( j, DimensionToSort ) < NewStartingKey Then
      \'This is now the lowest number -
      \'remember it\'s position.
      swap_pos = j
      NewStartingKey = arrArray ( j, DimensionToSort )
      NewStartingOtherA = arrArray ( j, OtherDimensionA )
      NewStartingOtherB = arrArray ( j, OtherDimensionB )
    End If
  Next

  If swap_pos <> row Then
    \'If we get here then we are about to do a swap
    \'within the array.
    arrArray ( swap_pos, DimensionToSort ) = StartingKeyValue
    arrArray ( swap_pos, OtherDimensionA ) = StartingOtherValueA
    arrArray ( swap_pos, OtherDimensionB ) = StartingOtherValueB

    arrArray ( row, DimensionToSort ) = NewStartingKey
    arrArray ( row, OtherDimensionA ) = NewStartingOtherA
    arrArray ( row, OtherDimensionB ) = NewStartingOtherB

    End If
  Next
End Sub
Avatar billede hh_appel Nybegynder
20. november 2001 - 09:21 #5
Eagleeye - du har reddet mig igen! ;-) Tak for hjælpen...
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