Classic Asp VBScript에서 배열을 반복하는 가장 좋은 방법은 무엇입니까?
-
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
포인터가 아닌 각 배열 요소의 복사본을 만듭니다.
여기에는 두 가지 문제가 있습니다.
배열 요소에 값을 할당하려고 하면 원본에 반영되지 않습니다.이 코드는 변수에 값 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
우리는 배열 요소의 인덱스를 모릅니다.
for each
, 요소의 순서는 보장되지 않습니다(순서대로 보이지만).
LBound
항상 0이 아닐 수도 있습니다.
VBScript에서 하한이 0이 아닌 다른 배열을 생성하는 것은 불가능하지만, 다른 하한을 지정했을 수 있는 COM 구성 요소에서 변형 배열을 검색하는 것은 여전히 가능합니다. LBound
.
즉, 나는 그런 일을 한 사람을 본 적이 없다고 말했습니다.
아마도 VB6에서 나온 것 같습니다.왜냐면 옵션 베이스 VB6의 명령문을 사용하면 다음과 같이 배열의 하한을 변경할 수 있습니다.
Option Base 1
또한 VB6에서는 다음과 같이 특정 배열의 하한을 변경할 수 있습니다.
Dim myArray(4 To 42) As String
나는 항상 For Each를 사용했습니다 ...