Avatar billede kovalt Nybegynder
07. marts 2003 - 13:49 Der er 17 kommentarer og
1 løsning

Sortere i strArray

Hej

  Mit spørgsmål er kort og godt om det er muligt at sortere i et str-array. Jeg har et array med en masse strenge efter formen:

navn/tal1/tal2/tal3/tal4/

mit spørgsmål er så om jeg kan sortere disse strenge således at den streg med højst tal4 kommer øverst, herefter tal3 osv.. Såfrem der er to tal4 der er ens skal der sorteres efter tal 3.

Når arrayet er sorteret skal det udskrives

/kovalt
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 13:54 #1
Selvfølgelig kan man det - men det er bøvlet. Hvordan er de
data kommet til verden? Fra en database?
Avatar billede kovalt Nybegynder
07. marts 2003 - 13:57 #2
Jeps.....

Det er fordi jeg har en DB over en masse fodboldresultater. Jeg skal ha et udtræk af de seneste eks. 5 kampe for hvert hold - beregne point og målscore og så ha dem sorteret så der kan udskrives en stilling...

Jeg er lidt løbet panden mod en mur... jeg ved ikke om det i det hele taget kan lade sig gøre når data er lageret på den måde som de er.

Jeg håber imidlertid der en mulighed med arrays
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 14:02 #3
Øh, står data sådan, præcis sådan, i din database? Hvis det er tilfældet
kan jeg da godt forstå du har problemer med det?
Avatar billede kovalt Nybegynder
07. marts 2003 - 14:13 #4
Nej det går de ikke :-)

min DB er bygget således op:

dato, hjemmehold, udehold, hjemmescore, udescore.

For hvert hold der er med i databasen skal jeg så ha beregnet:

målscore, vundne, uafgjorte, tabte, point

for et valgtfrit antal kamp.

Vælger brugeren eksempelvis 5 skal der ud fra de beregnede tal for hvert hold opstilles en stilling. Det var her arrayet kom ind i billedet idet jeg tænkte at jeg kunne samte oplysningerne i en str og sortere det i et array.

Har du evt. et bedre forslag? hvad gør jeg?

Som jeg ser det er det intet problem at få tallene beregnet - problemet er at sortere skidtet efter følgende prioritet.

1. pointantal
2. differencen i målscoren
3. flest scorede mål

/kovalt
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 14:26 #5
Åh, ja, point for fodboldkampe.... Hvordan er det nu reglerne er :)

Men nu siger du så ASP.... i PHP ville jeg putte data ind i objekter,
skrive sammenligningsfunktionen, og så bruge den indbyggede sortering.
Skal du pakke dem her ud hver gang, så du kan kigge på de individuelle
tal, så et det bøvlet og dyrt.

Hvad med at have det på formen:

  000033/000333/003333/000001/00002/noget andet

Altså fast længde, med foranstillede 0'er? Så kan du bare sortere
som tekststrenge.
Avatar billede kovalt Nybegynder
07. marts 2003 - 14:42 #6
Jeg er ikke lige helt..... altså stadig en steng pr. hold eller hvad? hvad er fordelen ved fast længde? Giver det ikke problemer hvis differencen i målscoren er negativ.... kan det så ikke ende ud i ex. 0000-1
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 14:45 #7
Åh, nej, negative tal .... Men da '-' er mindre end '0' går det
alligevel. Med fastlængde kan du bare sammenligne og sortere som tekst,
uden at pille de enkelte felter ud. Vigtigste sorteringskriterium først.

  0000033/...
  -000011/
Avatar billede kovalt Nybegynder
07. marts 2003 - 14:47 #8
Skal de så ikke i et array? så vil du sortere på substrenge eller?
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 14:48 #9
Ja, hver streng i et array - ikke sortere på delstrenge.
Men det er da lidt "nørdet" at gøre det sådan.... Man kan nok
ikke så meget andet i gammeldags ASP/VB
Avatar billede kovalt Nybegynder
07. marts 2003 - 14:50 #10
hvordan sorterer jeg i et array
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 14:51 #11
Mon ikke der en boblesortering på eksperten.dk et sted :)
Avatar billede kovalt Nybegynder
07. marts 2003 - 14:53 #12
er det en boblesortering jeg skal lede efter?

havde det været meget lettere i PHP
Avatar billede erikjacobsen Ekspert
07. marts 2003 - 15:09 #13
Ja. Syn's jeg...
Avatar billede -mundi- Nybegynder
07. marts 2003 - 15:13 #14
Sub SingleSorter( byRef arrArray )
    Dim row, j
    Dim StartingKeyValue, NewKeyValue, swap_pos

    For row = 0 To UBound( arrArray ) - 1
    '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 )
        NewKeyValue = arrArray ( row )
        swap_pos = row
           
        For j = row + 1 to UBound( arrArray )
        'Start inner loop.
            If arrArray ( j ) < NewKeyValue Then
            'This is now the lowest number -
            'remember it's position.
                swap_pos = j
                NewKeyValue = arrArray ( j )
            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 ) = StartingKeyValue
            arrArray ( row ) = NewKeyValue
        End If   
    Next
End Sub
Avatar billede dark-mixer Nybegynder
07. marts 2003 - 20:05 #15
Skreve disse funktioner til sortering af array's for nogen tid siden
Function ShellSort(vArray)
Dim TempVal
Dim i, GapSize, CurPos
Dim FirstRow, LastRow, NumRows
FirstRow = LBound(vArray)
LastRow = UBound(vArray)
NumRows = LastRow - FirstRow + 1
Do
  GapSize = GapSize * 3 + 1
Loop Until GapSize > NumRows
Do
  GapSize = GapSize \ 3
  For i = (GapSize + FirstRow) To LastRow
  CurPos = i
  TempVal = vArray(i)
  Do While CompareResult(vArray(CurPos - GapSize),TempVal)
    vArray(CurPos) = vArray(CurPos - GapSize)
    CurPos = CurPos - GapSize
    If (CurPos - GapSize) < FirstRow Then Exit Do
  Loop
  vArray(CurPos) = TempVal
  Next
Loop Until GapSize = 1
End Function

Function CompareResult(Value1, Value2)
CompareResult = (Value1 > Value2)
End Function

'Example
Dim Data(4)
Data(0) = "Free"
Data(1) = "Revenge"
Data(2) = "Coding"
Data(3) = "Clawfinger"
Data(4) = "Eraser"

ShellSort Data

For I = 0 to UBound(Data)
  Response.Write Data(i) & "<br>"
Next
Avatar billede kovalt Nybegynder
08. marts 2003 - 12:19 #16
dark-mixer>>

Det ligner meget det jeg søger. Jeg kunne imidlertid godt tænke mig om det var tal den kunne sortere. Problemet er lige nu at hvis jeg beder den sortere:

40
9
18

bliver rækkefølgen:

9
40
18

fordi den tager første tal først. Kan du ændre det? Endvidere var det planen at jeg gerne ville ha at der var to kriterer således at den sorterer først efter x og derefter efter y hvis formen er sådan her x/y


40/-10
40/3
40/-1
41/-30

skal således sorteres sådan her:

41/-30
40/3
40/-1
40/-10

Du skal nok få 200 point hvis du gider lave det!

/kovalt
Avatar billede kovalt Nybegynder
08. marts 2003 - 12:28 #17
Det første problem har jeg løst således:

' Skreve disse funktioner til sortering af array's for nogen tid siden
Function ShellSort(vArray)
Dim TempVal
Dim i, GapSize, CurPos
Dim FirstRow, LastRow, NumRows
FirstRow = LBound(vArray)
LastRow = UBound(vArray)
NumRows = LastRow - FirstRow + 1
Do
  GapSize = GapSize * 3 + 1
Loop Until GapSize > NumRows
Do
  GapSize = GapSize \ 3
  For i = (GapSize + FirstRow) To LastRow
  CurPos = i
  TempVal = vArray(i)
  Do While CompareResult(CDbl(vArray(CurPos - GapSize)),CDbl(TempVal))
    vArray(CurPos) = vArray(CurPos - GapSize)
    CurPos = CurPos - GapSize
    If (CurPos - GapSize) < FirstRow Then Exit Do
  Loop
  vArray(CurPos) = TempVal
  Next
Loop Until GapSize = 1
End Function

Function CompareResult(Value1, Value2)
CompareResult = (Value1 < Value2)
End Function

'Example
Dim Data(4)
Data(0) = "10"
Data(1) = "-10"
Data(2) = "40"
Data(3) = "9"
Data(4) = "-5"

ShellSort Data

For I = 0 to UBound(Data)
  Response.Write Data(i) & "<br>"
Next

%>
Avatar billede kovalt Nybegynder
10. marts 2003 - 14:09 #18
takker... jeg har tilpasset det
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