Avatar billede krogstrup Nybegynder
08. september 2006 - 05:29 Der 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.

Nogen gode idéer ?
Avatar billede tdh1309 Juniormester
08. september 2006 - 22:59 #1
Her er et forslag:

<%
' 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
%>
Avatar billede krogstrup Nybegynder
09. september 2006 - 16:19 #2
hej - tak for dit svar.
Jeg prøver det af snarest muligt - og vender tilbage :-)
/David
Avatar billede krogstrup Nybegynder
13. september 2006 - 15:47 #3
hej tdh1309

smider du et svar ?
Avatar billede tdh1309 Juniormester
14. september 2006 - 09:17 #4
Her er et svar...
Avatar billede tdh1309 Juniormester
14. september 2006 - 10:44 #5
PS. hvis du har nogle suplerende spørgsmål - kommer du jo bare med dem !
Avatar billede krogstrup Nybegynder
14. september 2006 - 11:09 #6
det skal jeg nok - tak for venligheden :-)
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