When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
Message Board
Related Web Technologies
User Tips!
Coding Tips

Sample Chapters
Commonly Asked Message Board Questions
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Stump the SQL Guru!
XML Info
Author an Article
ASP ASP.NET ASP FAQs Message Board Feedback
Print this page.
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:

- continued -

'assume array to display  - aNames has been created...
Dim iLoop
For iLoop = LBound(aNames) to UBound(aNames)
   Response.Write aNames(iLoop) & "<BR>"

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.

WARNING: This Approach Has Subtle Flaws!
While the naive algorithm shown here certainly does jumble the contents of an array, it does not do so in a manner that produces an even distribution of random results. For more information on the shortcomings of this algorithm, as well as two alternative correct approaches, check out: Techniques for Randomly Reordering an Array.

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

  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>"
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>"
[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!

  • ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article