(for Internet Explorer)
Dim  a : Set a = new ArrayClass
a.AddCSV  "12, 34", vbInteger
スタックのように要素を取り出すときは、
キューのように要素を取り出すときは、
  Set i_stack = new ArrayClass
  For i=0 To modules.UBound_
    If modules(i) = "delete" Then
      i_stack.Push  i
    End If
  Next
  Do
    If i_stack.Count = 0 Then  Exit Do
    modules.Remove  i_stack.Pop(), 1
  Loop
サンプル
削除する配列番号をスタックにプッシュして、ポップしながら modules 配列の要素を削除する
Pop
Function  ArrayClass::Search( in_KeyItem as variant,
    in_CompareFunction as Function,  in_ParameterOfCompareFunction as variant,
    in_StartIndexOrEmpty ) as integer  or  array of integer
in_CompareFunction
in_ParameterOfCompareFunction
in_CompareFunction の第3引数
in_StartIndexOrEmpty
比較を開始する要素番号 0以上、または Empty
→ vbslib.vbs
ソース
返り値
配列番号、または、配列番号の配列
in_StartIndexOrEmpty 引数が数値なら、返り値は配列番号です。 見つからなかったら、Empty
を返します。
in_StartIndexOrEmpty 引数が Empty なら、返り値は配列番号の配列です。 見つからなかったら
要素数 0 の配列を返します。
→ T_Arr.vbs
テスト
T_ArrayClass_Search
Set arr = new_ArrayClass( Array( 0, 1, 2, 3, 4, 5 ) )
arr.Remove  1, 2
Assert  IsSameArray( arr.Items, Array( 0, 3, 4, 5 ) )
Remove
→ T_Arr.vbs # T_ArrClass_Remove
テスト
objs.RemoveObject  b
サンプル:
テスト
→ T_Arr.vbs
T_AddNewObj
Set arr = new_ArrayClass( Array( 0, Empty, 2, Empty, Empty, 5 ) )
arr.RemoveEmpty
Assert  IsSameArray( arr.Items, Array( 0, 2, 5 ) )
テスト
→ T_Arr.vbs # T_ArrClass_RemoveEmpty
    Set  an_array = new_ArrayClass( Array( "A", "B". "C", "D" ) )
    an_array.RemoveByIndexes  Array( 1, 3 )
    Aseert  IsSameArray( an_array,  Array( "A", "C" ) ) )
サンプル
→ vbslib.vbs
ソース
→ T_Arr.vbs
テスト
T_ArrayClass_RemoveByIndexes
Sub  ArrayClass::ToEmpty()
配列を空にします。 配列要素数は 0 になります。
(src)
Function  ArrayClass::LookUpDic( Key as string, Value as variant ) as Dictionary
配列の要素の中から、指定した値を持つ辞書を返します。
サンプル
Set  dic1 = CreateObject( "Scripting.Dictionary" )
dic1.Item( "name" ) = "Item1"

Set  dic2 = CreateObject( "Scripting.Dictionary" )
dic2.Item( "name" ) = "Item2"

Set arr = new_ArrayClass( Array( dic1, dic2 ) )

Assert  arr.LookUpDic( "name", "Item1" ) Is dic1
"name", "Item1"
配列の要素が辞書のときに使えます。
該当する要素が無かったときは、Nothing を返します。
→ T_Dic.vbs # T_LookUpDicInArray
テスト
(src)
関連
Dim  ArrayClass::NewIterator as ArrayClassIterator
オブジェクトを生成します。
(src)
初めて ArrayClassIterator::GetNext を呼んだときは、先頭の要素を返します。
  For i=0 To Arr.UBound_
  Next
サンプル:
Dim  a : Set a = new ArrayClass
a.Add  "abc"
a.Add  "def"

echo  a.CSV '// "abc,def"
CSV
関連
サンプル
Assert  new_ArrayClass( Array( 1, 2, 3 ) ).CSV = "1,2,3"
サンプル
Dim  a : Set a = new ArrayClass
a.Add  "abc"
a.Add  "def"

echo  a.Code '// [ "abc","def" ]と表示
サンプル
→ vbslib.vbs
→ T_Arr.vbs
テスト
ソース
T_ArrClass_Code
Dim  a
Set a = New ArrayClass
a.Add  1
a.Copy  Array( 2, 3 )
'// a は、{ 2, 3 }
Copy
(src)
Set  arr = new ArrayClass
s = GetEchoStr( arr )
次のように代用できます。
Set  arr = new ArrayClass
echo  arr
次のように代用できます。
の要素を順番にたどっていくクラスです。
Dim  a : Set a = new ArrayClass
Dim  iter : Set iter = a.NewIterator()
While iter.HasNext()
  echo  iter.GetNext()
WEnd
サンプル
メンバー
参考
→ イテレーター (JavaScript 1.7)
次の要素を返す。 次回の呼び出しでは、その次の要素を返す。
次の要素があるかどうか
取得
(src)
次の要素を返す。 次の要素が無いときは、番兵を返す。
テスト
→ T_Arr_Target # [T_ArrIter]
Function  ArrayClassIterator::GetNext() as variant
次の要素を返す。 次回の呼び出しでは、その次の要素を返す。
Java2 の Iterator パターン、JavaScript 1.7 のイテレーターでは、next に相当します。
Next は、VB言語の予約語であることと、Me に副作用があるため、プロパティではなくメソッド
であり、メソッドは動詞で始まる方が読みやすいため、GetNext に変更しています。
補足
次の要素が無いときは、エラーになります。 エラーにしたくないときは、
を使ってください。
Function  ArrayClassIterator::HasNext() as boolean
次の要素があるかどうかを返す。
  Dim  f, line, a, elem, iter
  Set a = new ArrayClass : a.Add  new Elem
  Set iter = a.NewIterator
  Set sentinel = new Elem
  Set elem = iter.GetNextOrSentinel( sentinel )

  Set f = OpenForRead( path )
  Do Until  f.AtEndOfStream
    line = f.ReadLine()
    If elem.IsMatch( line ) Then  '// ここで番兵が使われることがある
      ...
      elem = iter.GetNextOrSentinel( sentinel )
              '// GetNext ではここでエラーになってしまうことがある
    End If
  Loop
  f = Empty
  elem = Empty
  iter = Empty
Function  ArrayClassIterator::GetNextOrSentinel( Sentinel as variant ) as variant
次の要素を返す。 ただし、次の要素が無いときは、Sentinel 引数(番兵)を返す。
サンプル:
GetNextOrSentinel
GetNextOrSentinel
標準の
の Item を、配列にしたクラスです。
  Dim  dic

  Set dic = new ArrayDictionary
  dic.Add  "key1", "item11"
  dic.Add  "key1", "item12"
  dic.Add  "key1", "item13"
  dic.Add  "key2", "item21"
  dic.Echo

  Dim  i,j
  For Each j in dic.Dic.Items() : For Each i in j.Items
    WScript.Echo  i
  Next : Next
item11
item12
item13
item21
上記スクリプトの出力
サンプル:
VBScript 標準の Dictionary (プロパティ)
メンバ
キーに要素を登録する。キーは重複可能
すべての要素を削除します
すべての要素を表示する
要素の数
1つのキーに対して、複数のアイテムを関連付けするときに使います。
(src)
テスト
→ T_Arr_Target.vbs [T_ArrayDic1]
Key, Item
*
Item
*
Dim  ArrayDictionary::Dic  as Dictionary of variant
ArrayDictionary クラスがラップしている辞書です。
要素(Item)は、オブジェクトでもそれ以外でも格納します。
(src)
Sub  ArrayDictionary::ToEmpty()
辞書に要素を空にします。 要素数は 0 になります。
(src)
Sub  ArrayDictionary::Add( Key as string, Item as variant )
辞書に要素を追加します。
Item
(src)
Function  ArrayDictionary::Count() as integer
辞書の要素数を返します。
1つのキーに複数の要素が関連付けされることがあるので、
要素数はキーの数と一致しないことがあります。
(src)
Sub  ArrayDictionary::Echo()
辞書のすべての要素を表示します。
(src)
重複しないでオブジェクトをまとめるコレクション。
Set  objects = new ObjectSetClass
Set  a_object = new NameOnlyClass
Set  b_object = new NameOnlyClass

objects.Add  a_object
objects.Add  b_object
objects.Add  b_object

echo  objects.Count  '// 2

objects.Remove  b_object

echo  objects.Count  '// 1
サンプル
テスト
ソース
→ T_Dic.vbs
T_ObjectSetClass
→ vbslib.vbs
関連
Sub  ObjectSetClass::Add( Object as variant )
コレクションに追加されていなければ、コレクションに追加します。
【引数】
Object
追加するオブジェクト
Property Get  ObjectSetClass::Count()
コレクションに追加されているオブジェクトの数を返します。
【引数】
返り値
コレクションに追加されているオブジェクトの数