수색…


비고

Dim myArray(2) As Integer

someFunc(myArray)

배열은 개체의 인덱스 순서 컬렉션입니다. 객체 유형은 배열 선언에 지정된 유형으로 정의됩니다.

Visual Basic .NET의 배열은 가장 일반적으로 (기본적으로) 0부터 시작합니다. 즉, 첫 번째 인덱스는 0입니다. 10 개의 요소로 구성된 배열의 인덱스 범위는 0-9입니다. 배열 요소에 액세스 할 때 최대 액세스 가능 인덱스는 요소의 총 개수보다 하나 작습니다. 이 때문에 배열 인덱스에 점진적으로 액세스하는 루프는 값이 배열 길이보다 작은 범위 검사를 항상 수행해야합니다.

배열 정의

Dim array(9) As Integer ' Defines an array variable with 10 Integer elements (0-9).

Dim array = New Integer(10) {} ' Defines an array variable with 11 Integer elements (0-10)
                               'using New.

Dim array As Integer() = {1, 2, 3, 4} ' Defines an Integer array variable and populate it
                                      'using an array literal. Populates the array with
                                      '4 elements.

ReDim Preserve array(10) ' Redefines the size of an existing array variable preserving any
                         'existing values in the array. The array will now have 11 Integer
                         'elements (0-10).

ReDim array(10) ' Redefines the size of an existing array variable discarding any
                'existing values in the array. The array will now have 11 Integer
                'elements (0-10).

0 기반

VB.NET의 모든 배열은 0 기반입니다. 즉, VB.NET 배열의 첫 번째 항목 (하한) 인덱스는 항상 0 입니다. VB6 및 VBA와 같은 이전 버전의 VB는 기본적으로 1 기반 이었지만 기본 경계를 무시할 수있는 방법을 제공했습니다. 이전 버전의 VB에서는 상한 및 하한 경계를 명시 적으로 지정할 수있었습니다 (예 : Dim array(5 To 10) . VB.NET에서는 다른 .NET 언어와의 호환성을 유지하기 위해 유연성이 제거되었으며 하한 of 0 이 항상 적용되지만 To 구문을 VB.NET에서 계속 사용할 수 있으므로 범위를 더 명확하게 지울 수 있습니다. 예를 들어 다음 예제는 모두 위에 나열된 예제와 같습니다.

Dim array(0 To 9) As Integer

Dim array = New Integer(0 To 10) {} 

ReDim Preserve array(0 To 10)

ReDim array(0 To 10)

중첩 배열 선언

Dim myArray = {{1, 2}, {3, 4}}

단일 차원 배열을 선언하고 배열 요소 값을 설정하십시오.

Dim array = New Integer() {1, 2, 3, 4}

또는

Dim array As Int32() = {1, 2, 3, 4}

배열 초기화

Dim array() As Integer = {2, 0, 1, 6}                   ''Initialize an array of four Integers.
Dim strings() As String = {"this", "is", "an", "array"} ''Initialize an array of four Strings.
Dim floats() As Single = {56.2, 55.633, 1.2, 5.7743, 22.345}
              ''Initialize an array of five Singles, which are the same as floats in C#.
Dim miscellaneous() as Object = { New Object(), "Hello", New List(of String) }
              ''Initialize an array of three references to any reference type objects
              ''and point them to objects of three different types.

다차원 배열 초기화

Dim array2D(,) As Integer = {{1, 2, 3}, {4, 5, 6}}
' array2D(0, 0) is 1 ; array2D(0, 1) is 2 ; array2D(1, 0) is 4

Dim array3D(,,) As Integer = {{{1, 2, 3}, {4, 5, 6}}, {{7, 8, 9}, {10, 11, 12}}}
' array3D(0, 0, 0) is 1 ; array3D(0, 0, 1) is 2
' array3D(0, 1, 0) is 4 ; array3D(1, 0, 0) is 7

들쭉날쭉 한 배열 초기화

들쭉날쭉 한 배열과 다차원 배열을 구분하는 괄호에주의하십시오. 하위 배열의 길이는 다를 수 있습니다.

Dim jaggedArray()() As Integer = { ({1, 2, 3}), ({4, 5, 6}), ({7}) }
' jaggedArray(0) is {1, 2, 3} and so jaggedArray(0)(0) is 1
' jaggedArray(1) is {4, 5, 6} and so jaggedArray(1)(0) is 4
' jaggedArray(2) is {7} and so jaggedArray(2)(0) is 7

널 배열 변수

배열은 참조 유형이므로 배열 변수는 null 일 수 있습니다. null 배열 변수를 선언하려면 크기없이 선언해야합니다.

Dim array() As Integer

또는

Dim array As Integer()

배열이 null인지 검사하려면 Is Nothing 인지 테스트합니다.

Dim array() As Integer
If array Is Nothing Then
    array = {1, 2, 3}
End If

기존 배열 변수를 null로 설정하려면 Nothing 설정하면됩니다.

Dim array() As Integer = {1, 2, 3}
array = Nothing
Console.WriteLine(array(0))  ' Throws a NullReferenceException

또는 동일한 작업을 수행하는 Erase 사용하십시오.

Dim array() As Integer = {1, 2, 3}
Erase array
Console.WriteLine(array(0))  ' Throws a NullReferenceException

두 변수에서 동일한 배열 참조

배열은 참조 유형이므로 여러 변수가 동일한 배열 객체를 가리킬 수 있습니다.

Dim array1() As Integer = {1, 2, 3}
Dim array2() As Integer = array1
array1(0) = 4
Console.WriteLine(String.Join(", ", array2))  ' Writes "4, 2, 3"

0이 아닌 하한

Option Strict On 사용하면 .NET Framework에서 0이 아닌 0 경계가있는 단일 차원 배열을 만들 수 있지만 "벡터"가 아니며 VB.NET 형식의 배열과 호환되지 않습니다. 즉, Array 로만 볼 수 있으므로 일반 배열 (index) 참조를 사용할 수 없습니다.

Dim a As Array = Array.CreateInstance(GetType(Integer), {4}, {-1})
For y = LBound(a) To UBound(a)
    a.SetValue(y * y, y)
Next
For y = LBound(a) To UBound(a)
    Console.WriteLine($"{y}: {a.GetValue(y)}")
Next

Option Strict Off 를 사용하는 것과 마찬가지로 배열을 IList 로 처리하여 (index) 구문을 다시 얻을 수 있지만 어레이가 아니므로 해당 변수 이름에 LBoundUBound 를 사용할 수 없습니다. 아직 권투를 피하지 않는) :

Dim nsz As IList = a
For y = LBound(a) To UBound(a)
    nsz(y) = 2 - CInt(nsz(y))
Next
For y = LBound(a) To UBound(a)
    Console.WriteLine($"{y}: {nsz(y)}")
Next

다차원이 아닌 0이 아닌 하한 배열 VB.NET 다중 차원 형식화 된 배열과 호환됩니다.

Dim nza(,) As Integer = DirectCast(Array.CreateInstance(GetType(Integer),
                                   {4, 3}, {1, -1}), Integer(,))
For y = LBound(nza) To UBound(nza)
    For w = LBound(nza, 2) To UBound(nza, 2)
        nza(y, w) = -y * w + nza(UBound(nza) - y + LBound(nza),
                                 UBound(nza, 2) - w + LBound(nza, 2))
    Next
Next
For y = LBound(nza) To UBound(nza)
    Dim ly = y
    Console.WriteLine(String.Join(" ",
        Enumerable.Repeat(ly & ":", 1).Concat(
            Enumerable.Range(LBound(nza, 2), UBound(nza, 2) - LBound(nza, 2) + 1) _
            .Select(Function(w) CStr(nza(ly, w))))))
Next

MSDN 참조 : Array.CreateInstance



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow