arrays ubound 무엇 고전적인 ASP VBScript에서 배열을 통해 반복하는 가장 좋은 방법은 무엇입니까?




vbscript split (4)

아래 코드에서

For i = LBound(arr) To UBound(arr)

LBound 사용하여 묻는 요령은 무엇입니까? 물론 항상 0입니다.


사용하지 않는 좋은 이유가 있습니다. For i = LBound(arr) To UBound(arr)

dim arr(10) 은 배열의 11 멤버 (0부터 10까지 dim arr(10) 할당합니다 (VB6 기본 Option Base 가정).

많은 VB6 프로그래머는 배열이 1 기반이라고 가정하고 할당 된 arr(0) 사용하지 않습니다. For i = 1 To UBound(arr) 또는 For i = 0 To UBound(arr) 를 사용하면 arr(0) 이 사용 중인지 확실하기 때문에 잠재적 인 버그 소스를 제거 할 수 있습니다.

For each 은 포인터가 아니라 각 배열 요소의 복사본을 만든다.

여기에는 두 가지 문제가 있습니다.

  1. 배열 요소에 값을 할당하려고하면 원본에 반영되지 않습니다. 이 코드는 변수 i 에 47의 값을 할당하지만 arr 의 요소에는 영향을주지 않습니다.

    arr = Array(3,4,8)
    for each i in arr
         i = 47
    next i
    Response.Write arr(0) '- returns 3, not 47

  2. for each 배열 요소의 인덱스를 알 수는 없으며 요소 순서가 보장되지는 않습니다 (순서는 같음).


LBound 는 항상 0이 아닐 수도 있습니다.

VBScript에서 0 하한 이외의 다른 배열을 만들 수는 없지만 다른 LBound 지정한 COM 구성 요소에서 변형 배열을 검색 할 수는 있습니다.

그것은 내가 그런 것을 한 사람을 만난 적이 없다고 말했다.


For Each 사용하지 않는 이유는 무엇입니까? 그렇게하면 LBoundUBound 가 무엇인지 신경 쓸 필요가 없습니다.

Dim x, y, z
x = Array(1, 2, 3)

For Each y In x
    z = DoSomethingWith(y)
Next

VB6에서 온 것 같습니다. VB6의 Option Base 문을 사용하면 다음과 같이 배열의 하한을 변경할 수 있습니다.

Option Base 1

또한 VB6에서는 다음과 같이 특정 배열의 하한을 변경할 수 있습니다.

Dim myArray(4 To 42) As String






vbscript