VBScriptで配列内の要素の数を判断する「最良の方法」とは何ですか?VBScript:配列内のnull以外の要素の数の確認
UBound()は、配列に割り当てられたスロットの数を示しますが、入力されるスロットの数は表示されません。状況によっては、同じ数であってもなくてもかまいません。
VBScriptで配列内の要素の数を判断する「最良の方法」とは何ですか?VBScript:配列内のnull以外の要素の数の確認
UBound()は、配列に割り当てられたスロットの数を示しますが、入力されるスロットの数は表示されません。状況によっては、同じ数であってもなくてもかまいません。
まず最初に、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
機能を使用「空」であることを確認したい場合: - パラメータそれは実際に適切にEmpty
場合
If IsEmpty(arr(x)) Then
IsEmpty
にのみtrueを返します。
また、別の問題があります。Null
は、配列または変数に保持できる値です。しかし: -
MsgBox Null = Empty
は "ヌルの無効な使用"、ランタイムエラーであり、: -
MsgBox IsEmpty(Null)
はfalseです。したがって、Null
が未定義か、有効な値かどうかを判断する必要があります。 Null
もあなたのように見えるためにあなたのIf
の文必要がある未定義を意味している場合: -
If IsEmpty(arr(x)) Or IsNull(arr(x)) Then ....
をあなたはNull
アレイに割り当てることはありません知っていれば、これを放棄することができるかもしれません。
埋め込まれている要素を示すために何も組み込まれていません。最良の方法は、配列から要素を追加/削除する際に、count変数を使用してこれを追跡することです。スペンサーRuportは、それがそもそも追跡自分を保つために、おそらく良いでしょう、言うように
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
:私はここに、これを行うための非反復法を認識していないよ
あなたのコメントは素晴らしく、OPの元の質問とはまったく関係がありますが、私の時間の5分を無駄にしただけで、神はこの質問に遭遇した他の人の時間を知っています。配列が空であるかどうかを判断する方法や、Emptyプロパティ間のニュアンスを調べる方法は、配列内の要素数を決定することではありませんでした。 OPの質問に対する答えをあなた自身で省略している間に、あなたが間違っていると感じた別の回答にコメントを投稿している理由を私は知りません。 – Matt