I\'m trying to create a simple list in a VBscript, but I\'m unable to find something similar.
Basically, I\'m working on Active directory, and I need to get all the
Set dic = CreateObject("Scripting.Dictionary")
dic.Add "Item1", ""
dic.Add "Item2", ""
dic.Add "Item3", ""
Get rid of the dictionary and unleash the power of an ArrayList.
Option Explicit
dim list
Set list = CreateObject("System.Collections.ArrayList")
list.Add "Banana"
list.Add "Apple"
list.Add "Pear"
list.Sort
list.Reverse
wscript.echo list.Count ' --> 3
wscript.echo list.Item(0) ' --> Pear
wscript.echo list.IndexOf("Apple", 0) ' --> 2
wscript.echo join(list.ToArray(), ", ") ' --> Pear, Banana, Apple
EDIT: I see you already tried the ArrayList, but got an error. It seems your installation of the dotnet framework is not correct (System.Collections.ArrayList is part of that). Microsoft has an article about how to solve that: http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/error-code-0x80131700/3add8d80-00e0-4355-a994-8630d01c18f5
Here is an alternative as well... An actual List class that I created some time ago. You can freely use/modify it to suit your needs. The original class I built actually depends on another custom class called ArrayIterator.
Here is how to use it...
Set myList = New List
myList.Add("a")
myList.Add("b")
myList.Add("c")
' Iterate through the List using ArrayIterator. You can of course use other methods...
Set myListItr = myList.GetIterator
While myListItr.HasNext
MsgBox myListItr.GetNext
Wend
' Iterate through the List by getting the underlying Array.
Dim element
For Each element In myList.GetArray
MsgBox element
Next
Source code for List class:
Class List
Private mArray
Private Sub Class_Initialize()
mArray = Empty
End Sub
' Appends the specified element to the end of this list.
Public Sub Add(element)
If IsEmpty(mArray) Then
ReDim mArray(0)
mArray(0) = element
Else
If mArray(UBound(mArray)) <> Empty Then
ReDim Preserve mArray(UBound(mArray)+1)
End If
mArray(UBound(mArray)) = element
End If
End Sub
' Removes the element at the specified position in this list.
Public Sub Remove(index)
ReDim newArray(0)
For Each atom In mArray
If atom <> mArray(index) Then
If newArray(UBound(newArray)) <> Empty Then
ReDim Preserve newArray(UBound(newArray)+1)
End If
newArray(UBound(newArray)) = atom
End If
Next
mArray = newArray
End Sub
' Returns the number of elements in this list.
Public Function Size
Size = UBound(mArray)+1
End Function
' Returns the element at the specified position in this list.
Public Function GetItem(index)
GetItem = mArray(index)
End Function
' Removes all of the elements from this list.
Public Sub Clear
mArray = Empty
End Sub
' Returns true if this list contains elements.
Public Function HasElements
HasElements = Not IsEmpty(mArray)
End Function
Public Function GetIterator
Set iterator = New ArrayIterator
iterator.SetArray = mArray
GetIterator = iterator
End Function
Public Function GetArray
GetArray = mArray
End Function
End Class
Source code for ArrayIterator class:
Class ArrayIterator
Private mArray
Private mCursor
Private Sub Class_Initialize()
mCursor = 0
End Sub
Public Property Let SetArray(array)
mArray = array
End Property
Public Function HasNext
HasNext = (mCursor < UBound(mArray)+1)
End Function
Public Function GetNext
GetNext = mArray(mCursor)
mCursor = mCursor + 1
End Function
End Class