4.04.2012

VBScript: How to get the size of an array

VBScript: 配列の要素数を取得する

ある配列が与えられたとき、その要素数(>= 0)を調べるにはどのようにしたらよいのだろうか?
UBound() 関数は、要素数が 0 の配列に対して使用すると、インデックスエラーとなってしまう。

その一つの解が For Each .. In .. ステートメントである。

Function GetArraySize(ByVal arr)
  Dim i
  For Each i In arr
    GetArraySize = UBound(arr) + 1
    Exit Function
  Next
  GetArraySize = 0
End Function

配列の要素数が 1 以上であれば、For Each .. ブロックの内部に進み、UBound() の結果 + 1 が返される。
配列の要素数が 0 ならば、For Each .. はスキップされ、0 が返される。

これを応用すれば、要素数を保持しなくても、配列の末尾に要素を追加する処理を行える。

Dim x()
AppendToArray x, 123
AppendToArray x, 456
AppendToArray x, 789
WScript.Echo x(0), x(1), x(2)  ' 123 456 789

Function AppendToArray(ByRef arr, ByVal value)
  Dim i, size: size = 0
  For Each i In arr
    size = UBound(arr) + 1
    Exit For
  Next

  ReDim Preserve arr(size)
  arr(size) = value
End Function

例外を捕捉するよりは、スマートではないだろうか。

0 件のコメント:

コメントを投稿