2009-07-16 85 views
2

什麼是「最好」的方式來確定在VBScript數組中元素的個數?的VBScript:尋找一個數組非空元素的個數

UBound函數()告訴你有多少插槽已經被分配給數組,而不是多少都充滿 - 根據不同的情況,這些可能會或可能不會是相同的數字。

回答

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 

因此,如果你希望的任何值是一個數組元素然後比較清空不剪的一個有效的定義值。

如果你真的想成爲確保元素是忠實地「不確定」,也就是「空」使用IsEmpty功能: -

If IsEmpty(arr(x)) Then 

IsEmpty只會返回true,如果該參數實際上正確Empty

也有另一種問題,Null是可以在陣列的或可變的被保持的可能值。但是: -

MsgBox Null = Empty 

是一個運行時錯誤, 「無效使用空的」,並且: -

MsgBox IsEmpty(Null) 

是假的。因此,您需要確定Null是指未定義還是有效值。如果Null也意味着不確定您需要If聲明的樣子: -

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

您可能能夠放棄這一點,如果你知道一個Null將永遠不會被分配到陣列中。

2

沒有什麼內置的告訴你件充滿。最好的方法是在添加/刪除數組中的元素時,使用count變量自己跟蹤這個問題。

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 

斯賓塞Ruport說,它可能更好地跟蹤自己開始。

+0

這實際上得到了我想要的相反,但技術工作正好相反(查找填充槽,比較arr(x)<> vbUndefined)。 – TSomKes 2009-07-17 01:38:03

+1

查看由AnthonyWJones提供的更全面解決方案的答案。 – 2010-09-06 22:03:36

相關問題