배열은 정렬된 데이터의 모음입니다. 배열의 요소는 동일한 데이터 유형에 속하지 않을 수 있습니다. 통합된 배열 이름과 아래 첨자를 사용하여 배열의 요소를 고유하게 식별합니다. 한 요소를 변경해도 다른 요소에는 영향을 주지 않습니다. 배열의 첨자는 경계가 있으며 하한과 상한으로 구분됩니다. 배열은 Dim, Private, Public 또는 Static을 사용하여 선언할 수 있으며 해당 구문 형식은 동일합니다. 다음에서는 Dim을 사용하여 배열을 선언하는 방법만 소개합니다.
1. 배열 정의 및 선언
배열의 정의 구문은 다음과 같습니다.
Dim 배열 이름 ([[아래 첨자 To의 하한] 첨자의 상한]) [데이터 유형으로]
예를 들어(현재 모듈의 배열에 대한 기본 하한이 0이라고 가정):
① Dim A(10)을 정수로 사용
배열 이름이 A임을 나타냅니다. 이 배열의 첨자의 하한은 기본값 0이고, 첨자의 상한은 10입니다. A(0), A(1)까지 Integer 유형의 요소가 11개 있습니다. )에서 A(10)으로.
② Dim B(1 ~ 20)을 정수로 사용
배열 이름이 B임을 나타냅니다. 이 배열의 첨자의 하한은 1이고, 첨자의 상한은 20이며, B(1)에서 B(20)까지 Integer 유형의 요소가 20개 있습니다.
③딤데이어레이(50)
DayArray가 51개의 인덱스(0~50) 요소가 있는 Variant 배열임을 나타냅니다.
④Dim Matrix(3, 4)를 정수로 사용
Matrix가 2차원 정수 배열임을 나타냅니다.
⑤Dim MyMatrix(1 ~ 5, 4 ~ 9, 3 ~ 5) As Double
MyMatrix가 상한과 하한이 명시적으로 지정된 3차원 이중 배열임을 나타냅니다.
⑥어두운 생일(1~10)을 날짜로
BirthdayDay가 1부터 10까지의 인덱스를 갖는 날짜 유형 배열임을 나타냅니다.
2. 옵션베이스문
Option Base 문은 모듈 수준에서 배열 첨자의 기본 하한을 선언하는 데 사용됩니다.
Option Base 문의 구문은 다음과 같습니다.
옵션 베이스 {0 |
참고: 기본적으로 배열의 하한은 0이며 지금은 Option Base 문을 사용할 필요가 없습니다. 이 문을 사용하여 배열 하한값 1을 지정하는 경우 모듈의 배열 선언 앞에 Option Base 문을 사용해야 합니다.
알아채다:
(1) Dim, Private, Public, ReDim 및 Static 문의 To 절은 배열의 첨자를 제어하는 보다 유연한 방법을 제공합니다. 그러나 To 절을 사용하여 명시적으로 하한을 지정하지 않으면 Option Base를 사용하여 기본 하한을 1로 설정할 수 있습니다. Array 함수를 사용하여 생성된 배열의 하한은 배열이 형식 라이브러리(예: VBA.Array) 이름으로 한정되지 않는 한 Option Base 문으로 지정된 하한에 의해 결정됩니다. 라이브러리 이름인 경우 Array 함수를 사용하여 생성된 배열의 하한은 Option Base의 영향을 받지 않습니다.
(1) Option Base 문은 해당 문이 포함된 모듈에 있는 배열의 하한에만 영향을 미칩니다.
배열 선언에 대한 몇 가지 참고 사항:
①배열 이름의 명명 규칙은 변수 이름의 명명 규칙과 동일합니다.
② 배열 이름은 괄호 안에 표시되며, C 언어와 달리 대괄호는 사용할 수 없습니다.
③아래첨자의 하한은 상한보다 클 수 없다.
④ 변수명이나 상수명(실수 포함)을 첨자 경계로 사용할 수 있습니다. 첨자의 경계가 상수 이름인 경우 배열의 크기는 고정됩니다. 첨자의 경계가 변수 이름인 경우 배열의 크기는 동적으로 정의될 수 있습니다. 즉, 배열의 크기는 다음과 같습니다. 프로그램이 실행되는 동안 변수의 값. 따라서 VB의 배열은 정적 배열과 동적 배열이라는 두 가지 유형의 배열로 나눌 수 있습니다.
3. 정적 배열
정적 배열은 배열 요소의 수가 고정되어 있음을 의미합니다. 즉, 배열 요소가 차지하는 메모리 공간의 크기가 고정되어 있습니다. 고정 크기 배열은 차원에 따라 1차원 배열과 다차원 배열로 나눌 수 있습니다.
다차원 배열을 선언하는 구문 형식은 다음과 같습니다.
Dim 배열 이름 ([첨자 경계 목록]) [데이터 유형으로]
아래 첨자 경계의 정의 형식: [아래 첨자 하한 To] 아래 첨자 상한
아래 첨자 경계 목록은 쉼표로 구분된 배열의 각 차원에 대한 아래 첨자 경계를 나타냅니다.
[아래첨자 하한 To] 아래첨자 상한, [아래첨자 하한 To] 아래첨자 상한, ..., [아래첨자 하한 To] 아래첨자 상한
(1차원) (2차원) (n차원)
n=1인 경우 배열을 1차원 배열이라고 하고, n=2인 경우 배열을 2차원 배열이라고 하며, n=m인 경우 해당 배열을 m차원 배열이라고 합니다.
다음 예에서는 1차원 배열의 사용을 소개합니다.
'길이가 51인 문자열 배열 FriendsName을 선언합니다.
희미한 친구 이름(50) 문자열로
'길이가 11인 전역 정수 배열 클래스를 선언합니다.
공개 클래스(10)를 정수로 사용
1차원 배열의 요소 수는 (상한 - 하한 + 1)입니다.
루프 문을 사용하여 다음과 같이 배열에 초기 값을 할당할 수 있습니다.
나는 정수로 희미해진다
I = 0 To 11 '루프문의 프로그램 흐름 제어 사용
C(I) = 나
다음 나는
하한이 명시적으로 지정되지 않은 경우 배열의 하한은 Option Base 문에 의해 제어됩니다. Option Base 문이 없는 경우 하한은 기본적으로 0으로 설정됩니다.
배열의 차원은 2개로 제한되지 않습니다. VB에서는 60개까지 확장할 수 있습니다. 실제 응용에서는 3차원 이상의 배열을 적용하는 경우가 많지 않습니다. 다차원 배열을 정의할 때 배열의 모든 첨자 경계를 지정하려면 Dim 문 하나만 있으면 됩니다. 다차원 배열을 사용하면 의미 있는 통계 데이터를 쉽게 나타낼 수 있습니다. 예를 들어:
희미한 이익(16,10,12)을 통화로 사용
이 Profit 배열은 매장명, 부서, 월을 매개변수로 특정 백화점의 수익을 나타내는 데 사용할 수 있습니다. 예를 들어 Profit(2,8,11)은 11월 두 번째 지점의 8번째 부서 수익을 나타냅니다.
4. 동적 배열
때로는 어레이를 사용하기 전에 실제 요구 사항을 충족하기 위해 얼마나 큰 어레이가 필요한지 알 수 없는 경우도 있습니다. 물론, 실제적인 응용 요구 사항을 충족할 만큼 충분히 크게 배열의 크기를 정의할 수 있지만 이 방법은 매우 비효율적입니다(메모리 공간을 많이 낭비함). 동적 배열을 사용하면 프로그램이 실행되는 동안 실제 필요에 따라 배열의 크기를 정확하게 정의할 수 있습니다.
배열을 선언할 때 차원 목록을 제공하지 않으면 배열이 동적 배열로 선언됩니다. 예를 들어:
Dim MyArry()를 정수로 사용
동적 배열을 사용하기 전에 ReDim 문을 사용하여 재정의해야 합니다. 예를 들어 앞에서 선언한 MyArry 배열은 다음 문을 사용하여 동적 2차원 배열로 정의할 수 있습니다.
ReDim MyArry(10,10)
ReDim 문을 반복적으로 실행하여 동적 배열을 여러 번 정의할 수도 있습니다. ReDim을 사용하여 정의할 수 있는 최대 차원 수는 60개입니다. ReDim 문은 배열의 각 차원에 있는 요소 수를 변경할 수 있지만 차원 수는 변경할 수 없습니다. 다음은 ReDim 문의 표준 적용 예입니다.
Dim MyArry() As Single '동적 배열 선언
ReDim MyArry(30,20,10) '배열 재정의
ReDim MyArry(50,23,21) '배열을 다시 재정의
ReDim의 구문은 Dim의 구문과 동일합니다. 또한 Preserve 키워드 옵션도 있습니다.
ReDim 보존 배열 이름 ([ [하한 대상] 상한]) [데이터 유형으로]
예를 들어:
ReDim MyArry(50,23,21)
ReDim 보존 MyArry(50,23,50)
참고: ReDim을 사용할 때 배열을 재정의하면 모든 배열 요소의 값이 사라지는 반면 Preserve를 사용하면 데이터를 유지할 수 있습니다. 그러나 Preserve를 사용하면 배열의 마지막 차원 크기를 변경할 때만 배열의 데이터를 보존할 수 있습니다. 1차원 배열의 경우 모든 데이터가 유지되지만 다차원 배열의 경우 모든 배열 데이터를 유지하려면 마지막 차원의 크기만 변경하면 됩니다. 그렇지 않으면 오류가 발생합니다.
5. LBound 함수와 UBound 함수
LBound 함수와 Ubound 함수는 모두 Long 유형 데이터를 반환합니다. 전자에서 얻은 값은 지정된 배열 차원에 사용할 수 있는 최소 첨자이고 후자에서 얻은 값은 최대 첨자입니다. 구문은 다음과 같습니다.
LBound(배열 이름[, 지정된 차원])
UBound(배열 이름[, 지정된 차원])
배열 이름은 필수입니다. 지정된 차원 수는 선택 사항이며 하한을 반환할 차원을 지정합니다. 1은 첫 번째 차원을 나타내고, 2는 두 번째 차원을 나타내는 식입니다. 지정된 차원을 생략하면 기본값은 1입니다.
LBound 함수와 UBound 함수를 사용하는 방법은 다음 예제를 참조하세요.
Dim A(1 to 100,3,-3 to 4) As Integer 'Option Base 언어를 사용하지 않는다는 가정 하에 3차원 배열을 정의합니다.
' 문은 배열 하한의 기본값을 변경합니다.
배열 A에 Lbound 및 Ubound 함수를 사용합니다. 반환 값 목록은 다음과 같습니다.
모든 차원의 기본 하한은 Option Base 문의 설정에 따라 달라집니다. 배열에서 LBound 함수와 UBound 함수를 사용하면 배열의 요소 수를 결정하는 데 사용할 수 있음을 알 수 있습니다.
선언에서 To 절을 사용하여 차원이 지정된 배열의 경우 Option Base 문에 의해 제한되지 않고 모든 정수를 하한으로 사용할 수 있습니다.
6. 어레이의 고급 기능
배열은 변수 그룹을 저장하는 데 가장 일반적으로 사용되지만 배열은 다른 방법으로도 유용합니다. 한 배열의 내용을 다른 배열에 할당하고, 배열을 반환하는 함수를 만들고, 배열을 반환하는 속성을 만들 수 있습니다. 대부분의 경우 이러한 기술은 애플리케이션 성능을 향상시킬 수 있습니다.
StrA = StrB와 같이 한 변수의 값을 다른 변수에 할당할 수 있는 것처럼 한 배열의 내용을 다른 배열에 할당할 수도 있습니다. 예를 들어 바이트 배열을 한 위치에서 다른 위치로 복사하려고 합니다. 한 번에 한 바이트씩 복사하면 됩니다. 절차는 다음과 같습니다.
하위 ByteCopy(oldCopy()를 바이트로, newCopy()를 바이트로)
' 매개변수 oldCopy()는 소스 배열이고, newCopy()는 대상 배열입니다.
Dim i를 정수로 표시
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) '동적 배열 재정의
For i = Lbound(oldCopy) To Ubound(oldCopy) '루프 할당
newCopy(i) = oldCopy(i)
다음
서브 끝
더 간단하고 효율적인 방법은 한 배열을 다른 배열에 직접 할당하는 것입니다.
하위 ByteCopy(oldCopy()를 바이트로, newCopy()를 바이트로)
' 매개변수 oldCopy()는 소스 배열이고, newCopy()는 대상 배열입니다.
newCopy = oldCopy '배열을 이용하여 직접 값을 할당
서브 끝
변수 할당과 관련하여 염두에 두어야 할 몇 가지 규칙이 있습니다. 예를 들어, 정수로 선언된 변수를 long으로 선언된 변수에 대입하면 문제 없이 처리될 수 있지만, 정수 변수에 long을 대입하면 쉽게 오버플로 오류가 발생할 수 있습니다. 배열 할당은 데이터 유형 변수 간의 할당에 관한 규칙을 준수하는 것 외에도 배열 차원의 수, 각 차원의 크기, 배열이 고정인지 동적인지 여부를 포함한 다른 규칙도 준수해야 합니다.
① 차원과 데이터 유형이 다른 배열을 할당할 때 고려해야 할 몇 가지 요소
l 할당 연산자 왼쪽의 배열 유형은 고정 배열(Dim x(1 to 10) As Integer) 또는 동적 배열(Dim x() As Integer)입니다.
l 할당 연산자 왼쪽에 있는 배열의 차원이 할당 연산자 오른쪽에 있는 배열의 차원과 일치하는지 여부입니다.
l 할당 연산자 양쪽에 있는 배열의 각 차원에 있는 배열 요소 수가 일치하는지 여부. 배열 선언이 달라도 차원은 일치할 수 있습니다. 예를 들어, 한 배열의 각 차원 요소에 0부터 번호가 지정되고 다른 배열의 요소에 1부터 번호가 지정되면 차원도 일치할 수 있습니다.
l 대입 연산자 양쪽에 있는 모든 요소의 데이터 유형은 호환 가능해야 합니다. 이러한 규칙은 변수 할당 규칙과 일치합니다.
표 3-6은 이러한 요소의 영향을 보여줍니다.
배열 할당 오류는 컴파일 시간이나 런타임에 발생할 수 있습니다(예: 데이터 유형을 캐스팅할 수 없거나 할당이 정적 배열을 다시 선언(ReDim)하려고 시도하는 경우). 할당 전에 배열이 일치하는지 확인하기 위해 오류 처리를 추가하도록 프로그램을 설계하십시오.
②배열을 반환하는 함수 작성
함수에서 일련의 값을 반환하는 것이 가능합니다. 예를 들어 문자열로 변환했다가 다시 변환할 필요 없이 함수에서 바이트 집합을 반환합니다.
다음은 바이트 배열을 반환하는 함수를 사용하는 간단한 예입니다.
비공개 하위 Form_Load()
희미한 b를 바이트로
Dim i를 정수로 표시
희미한 ReturnArray()를 바이트로
b = C바이트(54)
ReturnArray() = ArrayFunction(b) '함수 호출
i = Lbound(ReturnArray)에서 Ubound(ReturnArray)로
Msgbox ReturnArray(i) '팝업 메시지 상자를 반복하여 배열 값을 표시합니다.
다음
서브 끝
공용 함수 ArrayFunction(b As Byte) As Byte()
희미한 x(2)를 바이트로
x(0) = b
x(1) = b + C바이트(200)
x(2) = b + b
ArrayFunction = x '결과를 배열 x로 반환합니다.
기능 종료
위의 예제를 실행한 후 ReturnArray()는 ArrayFunction의 배열에 할당된 값을 포함하는 3요소 배열입니다. ArrayFunction 문은 배열을 매개변수로 전달합니다. 배열의 데이터 유형은 함수의 데이터 유형(이 경우 바이트)과 동일해야 합니다. 이는 함수 호출이므로 배열을 전달할 때 괄호가 필요하지 않습니다.
알아채다:
1. 다른 배열(ArrayFunction = x())에 할당하여 배열을 반환할 수 있지만 성능상의 이유로 이 접근 방식은 권장되지 않습니다.
2. 배열을 반환하는 함수에 대해 유형을 지정해야 합니다. 이 유형은 Variant일 수 있습니다. 이렇게 하면 Function X() As Variant()가 유효하고 Function X() As ()가 실패합니다.
3. 배열을 반환하는 함수를 호출할 때 반환 값을 저장하는 데 사용되는 변수도 배열이어야 하며 해당 데이터 유형은 함수의 반환 유형과 동일해야 합니다. 그렇지 않으면 유형 불일치 오류가 표시됩니다.
간단한 배열 정의
ASP에서 배열을 정의하고 초기화하는 방법에는 두 가지가 있습니다. 각각의 예를 살펴보겠습니다.
방법 1:
MyArray = 배열(1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월)
배열의 크기는 초기화된 요소의 수에 따라 결정됩니다.
방법 2:
Dim myArray(2) '배열 크기를 지정합니다
myArray(0)=1월
myArray(1)=2월
어레이 동적 확장
DIM myArray()
REDIM myArray(20) '배열 크기를 20으로 재정의합니다.
ReDim Preserve MyArray(i) 'Preserve는 배열의 원본 데이터를 유지합니다.
2차원 배열
예:
Dim MyArray(5,10) '2차원 배열을 정의합니다.
2차원 할당의 예:
MYArray(3,3)=100
2차원 배열에 대한 위장된 구현 방법도 있습니다.
희미한MyArray(5)
MyArray(0)=Array(...) '1차원 배열
MyArray(1)=Array(...)'1차원 배열
...
접근할 때 MyArray(x)(y) 형식을 사용하세요.
배열 인덱스
위의 방법을 사용하여 배열을 정의합니다. 각 차원 배열의 첫 번째 요소의 첨자는 0이고, 마지막 요소의 첨자는 요소 수 -1입니다.
그러나 다음과 같이 배열의 첨자를 지정할 수도 있습니다.
희미한 MyArray1(3 to 10) ' 아래 첨자는 3부터 10까지이며 MyArray(3)는 첫 번째 요소의 값을 가져옵니다.
유용한 배열 함수
Ubound(배열 이름) 함수--배열의 마지막 요소의 첨자를 반환합니다.
Lbound(배열 이름) 함수--배열의 첫 번째 요소에 대한 첨자를 반환합니다. 기본값은 0입니다.
더 많은 응용 프로그램:
배열 정렬 기능
함수 정렬(ary)
KeepChecking = TRUE
KeepChecking까지 수행 = FALSE
KeepChecking = 거짓
I = 0에서 UBound(ary)까지
I = UBound(ary)이면 다음을 위해 종료합니다.
ary(I) > ary(I+1)이면
FirstValue = ary(I)
SecondValue = ary(I+1)
ary(I) = 두 번째 값
ary(I+1) = FirstValue
KeepChecking = TRUE
종료 조건
다음
고리
정렬 = 아리
기능 종료
배열 정렬 기능 적용 예
DimMyArray
MyArray = 배열(1,5,123,12,98)
MyArray = 정렬(MyArray)
I = Lbound(MyArray)에서 Ubound(MyArray)로
응답.MyArray(I) 및 <br> 쓰기
다음
문자열을 분할하고 배열을 반환
DimMyArray
MyArray = 분할(문자열, 구분 기호)
I = Lbound(MyArray)에서 Ubound(MyArray)로
응답.MyArray(I) 및 <br> 쓰기
다음
애플리케이션 및 세션에서 배열 사용
응용프로그램.잠금
애플리케이션(StoredArray) = MyArray
응용 프로그램.잠금 해제
LocalArray = 애플리케이션(StoredArray)
응용 프로그램의 배열 덮어쓰기
응용프로그램.잠금
애플리케이션(StoredArray) = LocalArray
응용 프로그램.잠금 해제
세션 사용법은 애플리케이션과 동일합니다.
데이터베이스에서 배열로 데이터 가져오기
DimMyArray
모든 기록 가져오기
MyArray = RS.GetRows
처음 10개 레코드 가져오기
MyArray = RS.GetRows(10)
행 = 0에서 UBound(MyArray, 2)로
col = 0의 경우 UBound(MyArray, 1)
응답.쓰기(열, 행) & <br>
다음
다음
배열을 다른 페이지로 전달
배열을 다른 페이지에 전달하는 방법에는 다음 세 가지와 같이 여러 가지가 있습니다.
1. 쉼표로 구분된 문자열을 정의한 후 Split 함수를 사용하여 다음 페이지에서 배열을 다시 생성합니다.
2. 세션 변수에 배열을 저장한 후 다음 페이지에서 호출합니다.
3. 양식의 숨겨진 영역에 배열을 전달한 다음 자동으로 쉼표로 구분된 다음 Split 기능을 사용하여 배열을 다시 만듭니다.
처음 두 가지 방법은 좋지만 둘 다 세 번째 방법보다 더 복잡합니다. 여기서는 가장 간단한 세 번째 방법만 소개하겠습니다.
파일 1.asp:
<%
나는 어둡다
희미한 myArray(20)
I=0 ~ 20인 경우
myArray(I)=항목 & I
다음
%>
<html>
<본문>
<양식 이름=테스트양식 방법=포스트 작업=2.asp>
<%
I=0에서 ubound(myArray)까지
response.write <입력 유형=숨겨진 이름=myArray 값=' & myArray(I) & '>
다음
%>
<p>
<입력 유형=제출>
</form>
</body>
</html>
위에서 수행한 작업은 별도의 암시적 필드를 사용하여 배열의 각 요소를 양식에 저장하는 것입니다.
파일 2.asp
<html>
<본문>
<%
희미한 문자열
희미한 내 배열
나는 어둡다
arrString=요청(myArray)
myArray = 분할(arrString,,)
I=0에서 ubound(myArray)까지
response.write 항목 &I& = & myArray(I) & <br> & vbCrLf
다음
%>
</body>
</html>