Avatar billede mini-me Nybegynder
17. juni 2009 - 22:42 Der er 12 kommentarer og
1 løsning

Array Sortering

Hej,

Jeg har har en funktion som sortere mit array - det virker sådan set fint.

Function BubbleSort(arrInt)
           
        arrInt = Array(arrInt)
        for i = UBound(arrInt) - 1 To 0 Step -1
            for j= 0 to i
                if arrInt(j)>arrInt(j+1) then
                    temp = arrInt(j+1)
                    arrInt(j+1) = arrInt(j)
                    arrInt(j) = temp
                end if
            next
        next
        BubbleSort = arrInt
end function

response.write Join(BubbleSort("vvs","vand","kloak","ror","abc"),",")

Men hvis jeg henter strengen "vvs","vand","kloak","ror","abc" fra database så virker det ikke?

Er der noget jeg har set mig blind på?
Avatar billede mortvader Nybegynder
17. juni 2009 - 22:55 #1
Virker ikke, hvordan?
Du får en fejlmeddelelse? eller den sorterer ikke?
Avatar billede softspot Forsker
17. juni 2009 - 23:00 #2
Jeg tror det er fordi du har misforstået hvordan Array-funktionen fungerer...

Hvis du vil omsætte strengen

"vvs","vand","kloak","ror","abc"

til et array, skal du splitte den ved "," (dvs. anførselstegn komma anførselstegn og samtidig fjerne anførselstegn i enderne for at det bliver et array af værdier. Noget i stil med dette:

arrInt = Split(mid(arrInt,2,len(arrInt)-2), """,""")

Det vil, efter min bedste overbevisning, give dig et array af værdier (strenge), som indeholder:

arrInt(0) = "vvs"
arrInt(1) = "vand"
arrInt(2) = "kloak"
arrInt(3) = "ror"
arrInt(4) = "abc"
Avatar billede softspot Forsker
17. juni 2009 - 23:05 #3
Det her vil dog også fungere (men det synes jeg nu er lidt af et hack!) :-)

<%
Function BubbleSort(arrInt)
           
        execute "arrInt = Array(" & arrInt & ")"
        for i = UBound(arrInt) - 1 To 0 Step -1
            for j= 0 to i
                if arrInt(j)>arrInt(j+1) then
                    temp = arrInt(j+1)
                    arrInt(j+1) = arrInt(j)
                    arrInt(j) = temp
                end if
            next
        next
        BubbleSort = arrInt
end function

response.write Join(BubbleSort("""vvs"",""vand"",""kloak"",""ror"",""abc"""),",")
%>
Avatar billede softspot Forsker
18. juni 2009 - 00:22 #4
Koderettelsen i indlæg #2 skal kaldes på samme måde som i koderettelsen i indlæg #3, da din syntaks ellers ikke er gyldig (VBScript tillader dig, såvidt jeg ved, ikke at erklære variable antal parametre til en funktion).
Avatar billede mini-me Nybegynder
18. juni 2009 - 21:59 #5
Softspot #3 virker sådan set - men du skriver det er lidt af et hack?

Det jeg blot ønsker er at sortere en liste som er hevet ud fra min database til en tekst streng som ser "qoq,asd,ree,jv,oe" ud.
Avatar billede mini-me Nybegynder
18. juni 2009 - 22:11 #6
Det virker sådan her....

Men kan det blive pænere?

Function BubbleSortArray(arrInt)
           
        execute "arrInt = Array(" & arrInt & ")"
        for i = UBound(arrInt) - 1 To 0 Step -1
            for j= 0 to i
                if arrInt(j)>arrInt(j+1) then
                    temp = arrInt(j+1)
                    arrInt(j+1) = arrInt(j)
                    arrInt(j) = temp
                end if
            next
        next
        ' temp indeholder nu en sorteret liste..
        BubbleSortArray = arrInt
end function

myTestArr = Join(BubbleSortArray(brandsArray),",")

myTestArr = split(myTestArr,",")

for i = lbound(myTestArr) to ubound(myTestArr)

    response.Write("<a href=""/brands/" & doAddSeo(myTestArr(i)) & "/"">" & myTestArr(i) & "<br />")

next
Avatar billede softspot Forsker
19. juni 2009 - 00:24 #7
Ja, du kan bruge det første forslag, hvor strengen der sendes ind bare splittes op og gennemløbes som et normalt array. Det ville i så fald se således ud:

<%
Function BubbleSort(arrInt)
        arrInt = Split(arrInt,",")
        for i = UBound(arrInt) - 1 To 0 Step -1
            for j= 0 to i
                if arrInt(j)>arrInt(j+1) then
                    temp = arrInt(j+1)
                    arrInt(j+1) = arrInt(j)
                    arrInt(j) = temp
                end if
            next
        next
        BubbleSort = arrInt
end function

response.write Join(BubbleSort("vvs,vand,kloak,ror,abc"),",")
%>
Avatar billede softspot Forsker
20. juni 2009 - 00:23 #8
Bemærk i øvrigt at Bubblesort returnerer et array, så det er ikke nødvendigt at gøre andet end at udskrive det i din løkke (hvis nu man skal tage udgangspunkt i det eksempel i indlæg #6).
Avatar billede mini-me Nybegynder
25. juni 2009 - 07:53 #9
Softspot, mangler et svar fra din side :-)
Avatar billede softspot Forsker
25. juni 2009 - 08:32 #10
Nå ok, jeg var slet ikke klar over at du var tilfreds endnu, men du får da lige et svar ;-)
Avatar billede softspot Forsker
29. juni 2009 - 10:00 #11
Mini-me, du bad om svar...? ;-)
Avatar billede mini-me Nybegynder
29. juni 2009 - 10:06 #12
Ferie :-)
Avatar billede softspot Forsker
29. juni 2009 - 10:13 #13
Aaah, heldige rad! :D

Tak for point :)
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