Classic Asp VBScript에서 배열을 반복하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2348

  •  08-06-2019
  •  | 
  •  

문제

아래 코드에서

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

다음을 사용하여 묻는 요점은 무엇입니까? LBound?확실히 그것은 항상 0입니다.

도움이 되었습니까?

해결책

왜 사용하지 않습니까? For Each?그렇게 하면 무엇이 문제인지 신경 쓸 필요가 없습니다. LBound 그리고 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 기본 Option Base를 가정).

많은 VB6 프로그래머는 배열이 1 기반이라고 가정하고 할당된 배열을 절대 사용하지 않습니다. arr(0).다음을 사용하여 잠재적인 버그 소스를 제거할 수 있습니다. For i = 1 To UBound(arr) 또는 For i = 0 To UBound(arr), 왜냐하면 그렇다면 다음과 같은 것이 분명하기 때문입니다. arr(0) 사용되고 있습니다.

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

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

  1. 배열 요소에 값을 할당하려고 하면 원본에 반영되지 않습니다.이 코드는 변수에 값 47을 할당합니다. i, 그러나 요소에는 영향을 미치지 않습니다. 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이 아닌 다른 배열을 생성하는 것은 불가능하지만, 다른 하한을 지정했을 수 있는 COM 구성 요소에서 변형 배열을 검색하는 것은 여전히 ​​가능합니다. LBound.

즉, 나는 그런 일을 한 사람을 본 적이 없다고 말했습니다.

아마도 VB6에서 나온 것 같습니다.왜냐면 옵션 베이스 VB6의 명령문을 사용하면 다음과 같이 배열의 하한을 변경할 수 있습니다.

Option Base 1

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

Dim myArray(4 To 42) As String

나는 항상 For Each를 사용했습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top