VBScript:查找数组中非null元素的数量

时间:2009-07-16 16:43:19

标签: vbscript

在VBScript中确定数组中元素数量的“最佳”方法是什么?

UBound()告诉您已为阵列分配了多少个插槽,但没有填充多少个插槽 - 根据具体情况,这些插槽可能是也可能不是相同的数字。

3 个答案:

答案 0 :(得分:4)

我不知道这样做的非迭代方法,所以这是迭代方法:

Function countEmptySlots(arr)
    Dim x, c
    c = 0
    For x = 0 To ubound(arr)
        If arr(x) = vbUndefined Then c = c + 1
    Next
    countEmptySlots = c
End Function

正如Spencer Ruport所说,开始跟踪自己可能会更好。

答案 1 :(得分:4)

首先,没有名为vbUndefined的预定义标识符,因为当前接受的答案似乎暗示了。该代码仅在脚本顶部没有Option Explicit时才有效。如果您还没有使用Option Explicit,那么就开始这样做,它将为您节省各种悲伤。

您可以使用vbUndefined代替Empty的值,例如: -

If arr(x) = Empty Then ...

Empty是预定义的标识,是尚未为其分配值的变量或数组元素的默认值。

然而,需要注意的是。以下陈述均显示为真: -

MsgBox 0 = Empty
MsgBox "" = Empty
MsgBox CDate("30 Dec 1899") = True

因此,如果您希望这些值中的任何一个是数组元素的有效定义值,那么与Empty进行比较并不会将其删除。

如果你真的想确定该元素是真的“未定义”,那就是“空”使用IsEmpty函数: -

If IsEmpty(arr(x)) Then

IsEmpty只有在参数实际正确Empty时才会返回true。

还有另一个问题,Null是可以保存在数组或变量中的可能值。但是: -

MsgBox Null = Empty

是运行时错误,“无效使用null”和: -

MsgBox IsEmpty(Null)

是假的。因此,您需要确定Null是否表示未定义或是否为有效值。如果Null也表示未定义,则需要使用If语句: -

 If IsEmpty(arr(x)) Or IsNull(arr(x)) Then ....

如果您知道永远不会将Null分配到数组中,您可以放弃此。

答案 2 :(得分:2)

没有任何内置可以告诉您填充了哪些元素。最好的方法是在添加/删除数组中的元素时使用计数变量自己跟踪。