SkarreMedlem sedan apr. 20012 427 inlägg Jag har försökt modifiera nedanstående funktion som jag lärt mig från 4guysfromrolla för att den ska klara multidimensionella arrayer, men jag lyckas inte komma på hur jag ska göra och hoppas att någon kan hjälpa mig på traven. Jag försökte först helt sonika byta värden i alla dimensioner, men eftersom vissa dimensioner har olika antal index blir det problem med hur många gånger loopen ska loopa. Om första dimensionen har 4 index och en annan 50 så byts ju bara värden på fyra index.
Function ReArrange(ByVal arrArray)
intUpper = UBound(arrArray)
intLower = LBound(arrArray)
Randomize Timer
For i = intLower to intUpper
'Slumpar fram ett arrayindex att byta med originalet.
intSwapPos = Int(Rnd * (intUpper + 1))
'Byter värden mellan slumpat index och originalindex.
varTmp = arrArray(i)
arrArray(i) = arrArray(intSwapPos)
arrArray(intSwapPos) = varTmp
Next
ReArrange = arrArray
End Function
------------------
// Skarre
[Redigerat av Skarre den 13 dec 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Räcker det om den klarar tvådimensionella arrayer?
Function ReArrange(ByVal arrArray)
intUpper = UBound(arrArray)
intLower = LBound(arrArray)
Randomize Timer
For i = intLower to intUpper
'Slumpar fram ett arrayindex att byta med originalet.
intSwapPos = Int(Rnd * (intUpper + 1))
'Byter värden mellan slumpat index och originalindex.
for j = Lbound(arrArray,2) to Ubound(arrArray,2)
varTmp = arrArray(i,j)
arrArray(i,j) = arrArray(intSwapPos,j)
arrArray(intSwapPos,j) = varTmp
Next
Next
ReArrange = arrArray
End Function
------------------
essentitia preter non sans multiplicandum
SkarreMedlem sedan apr. 20012 427 inlägg Jag var nog inte tillräckligt klar i huvudet när jag ställde frågan. :x
Jag tänkte använda funktionen för att röra om ordningen i en array som skapats med getrows() och då ska ju den första dimensionen inte arrangeras om. Det jag vill åstadkomma är att alla värden i den andra dimensionen arrangeras om men att de ändå behåller integriteten (heter det så?) sinsemellan. Förklaringen är inte helt lysande men förhoppningsvis förstår ni vad jag menar. :)
// Skarre
[Redigerat av Skarre den 13 dec 2001]
SkarreMedlem sedan apr. 20012 427 inlägg Någonting i den här riktningen kanske?
Function ReArrange(ByVal arrArray)
intUpper1 = UBound(arrArray,1)
intLower1 = LBound(arrArray,1)
intUpper2 = UBound(arrArray,2)
intLower2 = LBound(arrArray,2)
Randomize Timer
For x = intLower1 to intUpper1
For i = intLower2 to intUpper2
'Slumpar fram ett arrayindex att byta med originalet.
intSwapPos = Int(Rnd * (intUpper2 + 1))
'Byter värden mellan slumpat index och originalindex.
varTmp = arrArray(x,i)
arrArray(x,i) = arrArray(x,intSwapPos)
arrArray(x,intSwapPos) = varTmp
Next
Next
ReArrange = arrArray
End Function
Det problem jag inte lyckats lösa är ju då att de slumpade talen blir olika för varje index i den första dimensionen (kolumnerna i databasen). Tänker jag rätt här, eller är jag helt ute och cyklar?
------------------
// Skarre
SkarreMedlem sedan apr. 20012 427 inlägg Ehhh.. nu har jag testat min funktion ovan....
Glöm det, det fungerar inte.
// Skarre
[Redigerat av Skarre den 13 dec 2001]
SkarreMedlem sedan apr. 20012 427 inlägg Nu har jag trippelkollat databasen och det verkar som om funktionen trots allt fungerar, men jag förstår fortfarande inte hur det går till.
Den första loopen går igenom den första dimensionen (kolumnerna i databasen) och för varje sådan kolumn läggs värdena i indexen i dimensionen under i slumpad ordning. Sedan går den vidare till nästa index i den första dimensionen (nästa kolumn i databasen) och gör samma sak, men det sker en ny slumnpningen för varje index i den första dimensionen så borde ordningen bli annorlunda för varje gång. Som sagt, vad är det jag missar?
------------------
// Skarre
SkarreMedlem sedan apr. 20012 427 inlägg Är det ingen som tror sig veta hur detta går till? Jag vågar inte riktigt fortsätta förrän jag vet att jag kan lita på funktionen.
------------------
// Skarre
SkarreMedlem sedan apr. 20012 427 inlägg Det var nog bara bra att ni ignorerade mig för jag lyckades lösa det själv och det känns ju alltid bäst. :) Och det var inte särskillt komplicerat trots allt.
Så, här är den nu. Skarres schyssta funktion för att slumpa om ordningen i en getrows-array: ;)
Function ReArrange(ByVal arrArray)
intUpper1 = UBound(arrArray,1)
intUpper2 = UBound(arrArray,2)
Randomize Timer
For j = 0 To intUpper2
'Slumpar fram ett arrayindex att byta med originalet.
intSwapPos = Int(Rnd * (intUpper2 + 1))
For x = 0 To intUpper1
'Byter värden mellan slumpat index och originalindex.
varTmp = arrArray(x,j)
arrArray(x,j) = arrArray(x,intSwapPos)
arrArray(x,intSwapPos) = varTmp
Next
Next
ReArrange = arrArray
End Function
------------------
// Skarre
[Redigerat av Skarre den 14 dec 2001]