08. september 2006 - 05:29Der er
5 kommentarer og 1 løsning
Hvordan shufles indholdet af et array
Jeg har et array, som indeholder en liste over filnavnene fra et specifikt bibliotek. Jeg har brug for at kunne udtrække 6 filnavne fra dette array, men hver gang dette sker, skal der trækkes 6 nye - dvs. de 6 filnavne skal trækkes fra en eller anden form for random funktion, eller måske skal arrayet bare sorteres random før jeg udtrækker de 6 øverste i array´et.
<% ' Vi opretter et array Dim iLoop, strTmp Dim resultArray(6) strDel = "" For iLoop = 1 to 100 strTmp = strTmp & strDel & "minfil" & iLoop & ".txt" strDel = ";" Next workArray = split(strTmp,";")
response.write "Det oprindelige array indeholder " & ubound(workArray) &" elementer<br>" ' Udtelementer 6 elementer hvorefter de via funktionen dumpArray udskrives randomShuffle workArray, resultArray dumpArray resultArray response.write "Det oprindelige array indeholder " & ubound(workArray) &" elementer<br>"
' Udtelementer 6 elementer hvorefter de via funktionen dumpArray udskrives randomShuffle workArray, resultArray dumpArray resultArray response.write "Det oprindelige array indeholder " & ubound(workArray) &" elementer<br>"
' Udtelementer 6 elementer hvorefter de via funktionen dumpArray udskrives randomShuffle workArray, resultArray dumpArray resultArray response.write "Det oprindelige array indeholder " & ubound(workArray) &" elementer<br>"
' Denne Function udtelementer et element fra arrayet
Function randomShuffle (byref workArray, byref resultArray) Dim arraySize, intIndex, strDraw arraySize = ubound(resultArray) ' Størrelse på array
For iLoop=0 to arraySize randomize intIndex = Int(ubound(workArray) * rnd()) resultArray(iLoop) = drawFromArray(workArray,intIndex) Next End Function
Function drawFromArray (byref workArray, intIndex) Dim arraySize, strDraw arraySize = ubound(workArray) ' Størrelse på array
' Sætter resultat = element nr. intIndex i workArray strDraw = workArray(intIndex)
' Nu skal elementet fjernes rigtigt ' Dette gøres ved at gøre arrayet et element mindre ' Det skal sikres at det element der skal slettes ligger til sidst! If intIndex<arraySize Then ' Det element der skal fjernes ligger pt. ikke til sidst workArray(intIndex) = workArray(arraySize) ' Det sidste element i arrayet bliver kopieret over det element som er udtrukket Redim preserve workArray(arraySize-1) ' Arrayet gøres nu et element mindre End If
drawFromArray = strDraw End Function
Function dumpArray(dumpArray) response.write "Array indeholder:<br>" If isarray(dumpArray) Then For iLoop=0 to ubound(dumpArray) response.write "Element " & iLoop & ": " & dumpArray(iLoop) & "<br>" Next Else response.write "EJ AR" End If response.write "<hr>" End Function %>
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.