以下のコードで
For i = LBound(arr) To UBound(arr)
を使用して尋ねるポイントは何LBound
ですか? 確かにそれは常に 0 です。
以下のコードで
For i = LBound(arr) To UBound(arr)
を使用して尋ねるポイントは何LBound
ですか? 確かにそれは常に 0 です。
なぜ使用しないのFor Each
ですか?LBound
そうすれば、 andが何であるかを気にする必要はありませんUBound
。
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
使用しない正当な理由があるFor i = LBound(arr) To UBound(arr)
dim arr(10)
配列の 0 から 10 までの 11 個のメンバーを割り当てます (VB6 の既定のオプション ベースを想定)。
多くの VB6 プログラマは、配列が 1 ベースであると想定しており、割り当てられarr(0)
た . For i = 1 To UBound(arr)
またはFor i = 0 To UBound(arr)
を使用することで潜在的なバグの原因を取り除くことができarr(0)
ます。
For each
ポインターではなく、各配列要素のコピーを作成します。
これには 2 つの問題があります。
配列要素に値を割り当てようとすると、元の値に反映されません。このコードは変数 に値 47 を割り当てますがi
、 の要素には影響しませんarr
。
arr = 配列 (3,4,8) arr の各 i について 私は= 47 次は Response.Write arr(0) '- 47 ではなく 3 を返します
の配列要素のインデックスがわからずfor each
、要素の順序が保証されていません (順序どおりに見えますが)。
LBound
常に 0 になるとは限りません。
VBScript で 0 下限以外のものを持つ配列を作成することはできませんが、異なるLBound
.
そうは言っても、そのようなことをした人に出会ったことはありません。
おそらくVB6から来ています。VB6のOption Baseステートメントを使用すると、配列の下限を次のように変更できるためです。
Option Base 1
また、VB6 では、次のように特定の配列の下限を変更できます。
Dim myArray(4 To 42) As String
私は常に For Each ループを使用してきました。