Rob van der Woude's Scripting Pages

VBScript Scripting Techniques > Data > ArrayLists

ArrayLists

Arrays can be used in any version of VBScript, and in any Windows version, provided that Windows Script Host is installed.

A (minor) disadvantage of VBScript arrays is that, in order to add an element to an existing array, and then sort that array, you need to:

' [1] Retrieve the index number of the last element in the array
idxLast = UBound( myArray )
' [2] Resize the array, preserving the current content
ReDim Preserve myArray( idxLast + 1 )
' [3] Add the new element to the array
myArray( idxLast + 1 ) = strNewValue
' [4] Sort the array using a "bubble sort" algorithm borrowed from the Scripting Guys
For i = ( UBound( myArray ) - 1 ) to 0 Step -1
	For j= 0 to i
		If UCase( myArray( j ) ) > UCase( myArray( j + 1 ) ) Then
			strHolder = myArray( j + 1 )
			myArray( j + 1 ) = myArray( j )
			myArray( j ) = strHolder
		End If
	Next
Next

In this article by the Scripting Guys an alternative technique is discussed: ArrayLists.
The ArrayList is a .NET Framework class, which means it requires the .NET Framework.

The following code is used to create an ArrayList and "populate" it with some data:

' this code creates and populates an ArrayList
Set myArrayList = CreateObject( "System.Collections.ArrayList" )
myArrayList.Add "F"
myArrayList.Add "B"
myArrayList.Add "D"
myArrayList.Add "C"

Now, to add an element and sort the ArrayList, all we need to do is:

' [1] add the new element to the ArrayList
myArrayList.Add "Z"
' [2] sort the ArrayList
myArrayList.Sort

And how about deleting an element?
In an array you would need to "shift" the elements to fill the gap and then ReDim the array again.
In an ArrayList you would use either myArrayList.Remove "element_value" or myArrayList.RemoveAt "element_index".

To learn more about the possibilities of the ArrayList class, read this Scripting Guys' article, browse the MSDN Library, and download and try my own ArrayLst.vbs demo script.


page last modified: 2017-02-16; loaded in 0.0077 seconds