VBSで連想配列といえば Scripting.Dictionary (辞書)を使うのが一般的だが、それ以外でも.NETの連想配列を使うことができる。ハッシュテーブルとソート済みリストだ。
この2つでは Scripting.Dictionary ではできない値からの要素の存在確認ができる。またソート済みリストでは当然、要素がソートされる。
Scripting.Dictionary - 順序なし連想配列
Dim myDictionary
Set myDictionary = CreateObject("Scripting.Dictionary")
' 要素を追加。
myDictionary.Add "12", "Alice"
myDictionary.Add "11", "Bob"
myDictionary.Add "13", "Charlie"
' 追加した要素の参照
Wscript.echo myDictionary("11")
Wscript.echo myDictionary("12")
Wscript.echo myDictionary("13")
' あるキーが存在するかどうかを判定
If myDictionary.Exists("13") Then
Wscript.echo "key 13 exists."
End If
' ある値が存在するかどうかを判定するメソッドはない
' すべてのオブジェクトを削除
myDictionary.RemoveAll
System.Collections.Hashtable - 順序なし連想配列
Dim myHashtable
Set myHashtable = CreateObject("System.Collections.Hashtable")
' 要素を追加。
myHashtable.Add "12", "Alice"
myHashtable.Add "11", "Bob"
myHashtable.Add "13", "Charlie"
' 追加した要素の参照
Wscript.echo myHashtable("11")
Wscript.echo myHashtable("12")
Wscript.echo myHashtable("13")
' キー"12"の要素を削除
myHashtable.Remove "12"
' あるキーが存在するかどうかを判定
If myHashtable.ContainsKey("13") Then
Wscript.echo "key 13 exists."
End If
' ある値が存在するかどうかを判定
If myHashtable.ContainsValue("Bob") Then
Wscript.echo "value Bob exists."
End If
' すべての要素を削除
myHashtable.Clear
System.Collections.SortedList - ソート済み順序付き連想配列
Dim mySortedList
Set mySortedList = CreateObject("System.Collections.SortedList")
' 要素を追加。キー順にソートされる。
mySortedList.Add "12", "Alice"
mySortedList.Add "11", "Bob"
mySortedList.Add "13", "Charlie"
' ソートされた順に表示
Dim i
For i =0 To mySortedList.Count-1
Wscript.echo mySortedList.GetKey(i) & ", " & mySortedList.GetByIndex(i)
Next
' 追加した要素の参照
Wscript.echo mySortedList("11")
Wscript.echo mySortedList("12")
Wscript.echo mySortedList("13")
' キー"12"の要素を削除
mySortedList.Remove "12"
' あるキーが存在するかどうかを判定
If mySortedList.ContainsKey("13") Then
Wscript.echo "key 13 exists."
End If
' ある値が存在するかどうかを判定
If mySortedList.ContainsValue("Bob") Then
Wscript.echo "value Bob exists."
End If
' 特定のインデックスにある値を置換
mySortedList.SetByIndex 1, "Dave"
' すべての要素を削除
mySortedList.Clear
なお肝心の.NET系言語(C#、VB.NET)ではジェネリック・クラスが導入されて以来、これらの非ジェネリックなハッシュテーブルとソート済みリストが使われることは少なくなった。