在VBScript中确定数组中元素数量的“最佳”方法是什么?
UBound()告诉您已为阵列分配了多少个插槽,但没有填充多少个插槽 - 根据具体情况,这些插槽可能是也可能不是相同的数字。
答案 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)
没有任何内置可以告诉您填充了哪些元素。最好的方法是在添加/删除数组中的元素时使用计数变量自己跟踪。