In the previous lesson, all of our variable arrays were of a fixed size. For example, an array was dimensioned with indexes from 1 to 5, and did not allow anything beyond the upper bound. A dynamic array is a special class of array whose upper bound can be changed at run-time. This means that the array can grow as necessary. Dynamic arrays are ideal when the number of items to be stored is not known when the program begins.
To accomplish a dynamic array, the variable is dimensioned like a regular array but no bounds are specified. For example,
Dim strNames() As String
will dimension a dynamic string array called
strNames. Its lower and upper bound have not yet been set.
To set and change the boundaries, the ReDim statement is used later in the code:
ReDim strNames(1 to 12) as String
This allows the size to be changeable; the upper bound 12 could be specified with a variable like
intNameCount. The following example demonstrates how this can be used.
' dimension Dim strNames() As String Dim intTotal as Integer Dim intCount as Integer ' initialize intTotal = InputBox("Please enter the number of names allowed:") ' resize array ReDim strNames(1 to intTotal) ' get names For intCount = 1 to intTotal strNames(intCount) = InputBox("Enter name " & CStr(intCount) & ":") Next intCount
In Example 1, what messages are displayed in the input boxes? What is the advantage of using a dynamic array?
|Note: Static arrays (those that are not dynamic) are slightly more efficient than dynamic arrays, meaning that the computer must work a little harder to access and redimension a dynamic array than a static array. When possible, you should use static arrays. Dynamic arrays are reserved for cases in which the number of elements needed in an array is not known.|
Visual Basic offers one more useful option in dealing with dynamic arrays. You can even change the upper bound of an array while it has data stored in it. This means that if five names have already been entered, and the upper bound has been reached, the array can be redimensioned to allow more names.
For example, the code:
ReDim Preserve strNames(1 to 6)
would change the size of the
strNames array so that it contained 6 elements, without destroying the information already stored in the array.
One important need in programming is the ability to search a list of data for a specific item. This is done most simply with a linear search, in which the program starts at the top of the list and compares each item until it finds a match or reaches the end of the list.
A linear search is best accomplished with a
Do...Loop because the type of loop will allow the search to terminate when a match is found, whereas a
For...Next Loop will search the entire list even if a match is found near the beginning.
A simple example of a linear search is demonstrated by the following algorithm:
|Algorithm 1: Linear Search|
intSearchPos = 1 so we start at the beginning Do Until intSearchPos > Length Of List Or blnFound If ArrayVariable(intSearchPos) = the string we're looking for Then Display "found" message at position intSearchPos blnFound = True so the loop will end End If Increment search position Loop
Class Exercise: Class List
If time permits, begin work on the class exercise in Lesson 3.