Avatar billede sysmatic Nybegynder
20. november 2006 - 10:45 Der er 4 kommentarer og
1 løsning

Sorter array ASC

Hejsa..

Jeg har et lille problem med at få sorteret outputtet fra arrayet korrekt.

<%
xsel = "mnuChk=25&mnuChk=14&mnuChk=20&mnuChk=45&mnuChk=25&mnuChk=4&mnuChk=1&mnuChk=31&mnuChk=22&mnuChk=7"

Response.write "The input values are those ones: <BR>"
Response.write xsel

myArr = Split(xsel,"&")
xSubMenuID = ""
  '-- Split arr into id numbers and add to string ---------------
  for i = 0 to uBound(myArr)
  If Left(myArr(i),6) = "mnuChk" Then
    myArrIn = Split(myArr(i),"=")
        tempArr = tempArr & myArrIn(1) & ","
  End If
  Next
 
  '-- Remove , at the end ---------------------------------------
  If Right(tempArr, 1) = "," Then
    tempArr = Left(tempArr, (Len(tempArr) - 1))
  End If
 
  '-- Unsorted values -------------------------------------------
  Response.write "<BR><BR>The unsorted values are those ones: <BR>"
  Response.write tempArr
 
  '-- Sort the Unsorted values ----------------------------------
  tempArrX = Array(tempArr)
  max=ubound(tempArrX)
  For i=0 to max
  For j=i+1 to max
    if tempArrX(i)>tempArrX(j) then
          TemporalVariable=tempArrX(i)
          tempArrX(i)=tempArrX(j)
          tempArrX(j)=TemporalVariable
    end if
  next
  next
 
  '-- Sorted values ---------------------------------------------
  Response.write "<BR><BR>The sorted values are those ones: <BR>"
  For i=0 to max
    Response.write tempArrX(i) & "<BR>"
  next
%>

Hvis jeg bruger mit genererede array tempArrX = Array(tempArr) så får jeg et output: 25,14,20,45,25,4,1,31,22,7
Men hvis jeg sætter id numrene ind i arrayet selv tempArrX = Array(25,14,20,45,25,4,1,31,22,7) så får jeg det output jeg skal bruge..

Hvorfor vil sorterings arrayet ikke gendkende mit autogen array???
Avatar billede sysmatic Nybegynder
20. november 2006 - 10:50 #1
PS. mit output skulle gerne se således ud:
1
4
7
14
20
22
25
25
31
45

:)
Avatar billede fennec Nybegynder
20. november 2006 - 13:46 #2
Jeg kan ikke helt gennemskue din sortering, men hvorfor bruger du ikke bare et af disse funktioner:
http://www.4guysfromrolla.com/webtech/011001-1.shtml
http://www.4guysfromrolla.com/webtech/012799-2.shtml

Afhængig af hvor stort dit array er, skal du bruge den ene eller anden. Jeg anbefaler dog den sidste (Quicksort). Den er langsommere ved små arrays, men det er ikke meget. Så medmindre du har 100 små arrays der skal sorteres kan man lige så godt bruge Quick hver gang.

Du kan se en sammenligning mellem Bubble og Quick på det første link.
Avatar billede eagleeye Praktikant
23. november 2006 - 11:10 #3
Grunden til du får det forkert er fordi if sætnignen sammenligner de to værdier som tekst og ikke tal det er i denne linie:


    if tempArrX(i)>tempArrX(j) then



Den hurtige er at skriver int() omkring så de to tolkes som tal:


    if int(tempArrX(i))>int(tempArrX(j)) then



Den pænere er at man tjekker på typen af de to værdier der skal sammenlignes, du kan bruger dette script jeg linker til som er det fra 4guysfromrolla.com men tilføjet en funktion FormatCompare som tjekker om de to værider er tal:
http://www.evolt.org/article/Quick_and_Dirty_ASP_Array_Sorting/17/21724/index.html
Avatar billede sysmatic Nybegynder
04. december 2006 - 13:04 #4
Hey eagleeye.

Tak for hjælpen.. det virker nu!

Men jeg skal lige har et svar før du kan få point!
Avatar billede eagleeye Praktikant
04. december 2006 - 17:07 #5
Ok, så kommer jeg lige med et svar :-)
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