Published: Wednesday, November 08, 2000
Randomly Reordering an Array
Imagine that you have a single-dimension array whose contents you'd like to display.
You can do this with some very simple code:
'assume array to display - aNames has been created...
Dim iLoop
For iLoop = LBound(aNames) to UBound(aNames)
Response.Write aNames(iLoop) & "<BR>"
Next
|
Clearly, this code will list each element in the array, starting at the first element
and iterating through to the last element. With just this code, though, with a static
array your users will see the exact same output each time they visit this ASP page!
Boring. Rather, why not randomly reorder the array so that, when the above snippet of
code is used to display the array, the output differs?
Now, before you say, "OK, sure, let's do it," take a moment to step back and think
about the challenges involved. How could we accomplish this? One quick and dirty way
to do this is to step through the array one element at a time, randomly picking a
number between the upper and lower bounds of the array, and swap the value of
the element of the array at the current position with the element of the array
at the position of the randomly selected number. To see this method in action,
review (and demo) the following code:
<%
'****************************************
' This function randomly reorders the
' array aArray using a quick and dirty
' approach... It's fast!
'****************************************
Function ReOrderArrayQuickNDirty(ByVal aArray)
Dim iUpper, iLower, iLoop, iSwapPos, varTmp
iUpper = UBound(aArray)
iLower = LBound(aArray)
Randomize Timer
'Loop through the array, randomly swapping values
For iLoop = iLower to iUpper
'Get an array index to swap
iSwapPos = Int(Rnd * (iUpper + 1))
'Swap the current element with the element at iSwapPos
varTmp = aArray(iLoop)
aArray(iLoop) = aArray(iSwapPos)
aArray(iSwapPos) = varTmp
Next
ReOrderArrayQuickNDirty = aArray 'Return the jumbled array
End Function
Dim aSites
ReDim aSites(2)
aSites(0) = "4GuysFromRolla.com"
aSites(1) = "ASPMessageboard.com"
aSites(2) = "ASPFAQs.com"
'Display the array in-order
Dim iLoop
For iLoop = LBound(aSites) to UBound(aSites)
Response.Write aSites(iLoop) & "<BR>"
Next
response.write "<P>"
'Jumble up the array and display the new, random order!
aSites = ReOrderArrayQuickNDirty(aSites)
For iLoop = LBound(aSites) to UBound(aSites)
Response.Write aSites(iLoop) & "<BR>"
Next
%>
|
[
View the live demo!]
There are, of course, other methods for randomly reordering an array. We'll examine
some alternative techniques in Part 2.
Read Part 2!