Visual Basic의 배열Arrays in Visual Basic

배열 라고 하는 값의 집합이 요소, 서로 논리적으로 관련이 있는 합니다.An array is a set of values, which are termed elements, that are logically related to each other. 예를 들어, 배열; 초등학교에서 각 학년의 학생 수가 구성 될 수 있습니다. 배열의 각 요소에는 단일 학년의 학생 수입니다.For example, an array may consist of the number of students in each grade in a grammar school; each element of the array is the number of students in a single grade. 마찬가지로, 클래스에 대 한 학생의 성적 배열을 구성 될 수 있습니다. 배열의 각 요소에는 단일 등급입니다.Similarly, an array may consist of a student's grades for a class; each element of the array is a single grade.

각 데이터 항목이 저장 가능한 개별 변수 이며It is possible individual variables to store each of our data items. 예를 들어, 응용 프로그램 분석 학생 점수를 사용할 수 있습니다 별도 변수로 각 학생의 등급이 대 한 같은 englishGrade1, englishGrade2등입니다. 이 방법에는 세 가지 주요 제한 사항:For example, if our application analyzes student grades, we can use a separate variable for each student's grade, such as englishGrade1, englishGrade2, etc. This approach has three major limitations:

  • 처리할 수 있다고 얼마나 많은 등급 정확 하 게 디자인 타임에 인식 해야 합니다.We have to know at design time exactly how many grades we have to handle.
  • 많은 수의 등급을 신속 하 게 처리 하기 힘들어집니다.Handling large numbers of grades quickly becomes unwieldy. 이 응용 프로그램을에 심각한 버그가 있을 가능성이 훨씬 더를 수 있습니다.This in turn makes an application much more likely to have serious bugs.
  • 유지 관리 하는 것이 어렵습니다.It is difficult to maintain. 추가 하는 각 새 엔터프라이즈급 응용 프로그램 수 수정, 다시 컴파일 및 다시 배포는 필요 합니다.Each new grade that we add requires that the application be modified, recompiled, and redeployed.

배열을 사용 하 여 동일한 이름으로 이러한 관련된 값을 참조할 고 라고 하는 숫자를 사용할 수 있습니다는 인덱스 하거나 첨자 배열에서 해당 위치에 따라 개별 요소를 식별 하기.By using an array, you can refer to these related values by the same name, and use a number that’s called an index or subscript to identify an individual element based on its position in the array. 배열 범위를 0에서 1을 뺀 총 수가 배열의 요소의 인덱스입니다.The indexes of an array range from 0 to one less than the total number of elements in the array. Visual Basic 구문을 사용 하 여 배열의 크기를 정의 하는 경우 총 배열의 요소 수가 아니라 가장 높은 인덱스를 지정 합니다.When you use Visual Basic syntax to define the size of an array, you specify its highest index, not the total number of elements in the array. 하나의 단위로 배열을 사용 하 여 작업할 수 및 해당 요소를 반복 하는 기능 디자인 타임에 포함 하는 정확 하 게 얼마나 많은 요소입니다. 알 필요가 없도록 해제 합니다.You can work with the array as a unit, and the ability to iterate its elements frees you from needing to know exactly how many elements it contains at design time.

설명하기 전에 몇 가지 빠른 예제는 다음과 같습니다.Some quick examples before explanation:

' Declare a single-dimension array of 5 numbers.
Dim numbers(4) As Integer

' Declare a single-dimension array and set its 4 values.
Dim numbers = New Integer() {1, 2, 4, 8}

' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)

' Redefine the size of an existing array and reset the values.
ReDim numbers(15)

' Declare a 6 x 6 multidimensional array.
Dim matrix(5, 5) As Double

' Declare a 4 x 3 multidimensional array and set array element values.
Dim matrix = New Integer(3, 2) {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}}

' Declare a jagged array
Dim sales()() As Double = New Double(11)() {}

차원 배열의 배열 요소Array elements in a simple array

라는 배열을 만들어 보겠습니다 students 초등학교 각 학년의 학생 수를 저장 합니다.Let's create an array named students to store the number of students in each grade in a grammar school. 요소의 인덱스 범위는 0부터 6까지입니다.The indexes of the elements range from 0 through 6. 이 배열을 사용 하 여 7 개의 변수를 선언 하는 보다 간단 합니다.Using this array is simpler than declaring seven variables.

다음 그림에 표시 된 students 배열입니다.The following illustration shows the students array. 각 배열 요소에서For each element of the array:

  • 요소의 인덱스는 학년을 나타냅니다(인덱스 0은 유치원을 나타냄).The index of the element represents the grade (index 0 represents kindergarten).

  • 요소에 포함된 값은 해당 학년의 학생 수를 나타냅니다.The value that’s contained in the element represents the number of students in that grade.

학생 수 배열을 보여 주는 다이어그램

다음 예제에서는 만들고 배열을 사용 하는 Visual Basic 코드를 포함 합니다.The following example contains the Visual Basic code that creates and uses the array:


Module SimpleArray
   Public Sub Main()
      ' Declare an array with 7 elements.
      Dim students(6) As Integer

      ' Assign values to each element.
      students(0) = 23
      students(1) = 19
      students(2) = 21
      students(3) = 17
      students(4) = 19
      students(5) = 20
      students(6) = 22
      
      ' Display the value of each element.
      For ctr As Integer = 0 To 6
         Dim grade As String = If(ctr = 0, "kindergarten", $"grade {ctr}")
         Console.WriteLine($"Students in {grade}: {students(ctr)}")
      Next
   End Sub
End Module
' The example displays the following output:
'     Students in kindergarten: 23
'     Students in grade 1: 19
'     Students in grade 2: 21
'     Students in grade 3: 17
'     Students in grade 4: 19
'     Students in grade 5: 20
'     Students in grade 6: 22

이 예제에서는 세 가지를 수행합니다.The example does three things:

  • 선언 된 students 개의 일곱 개의 요소로 이루어진 배열입니다.It declares a students array with seven elements. 6 배열 선언은 배열의 마지막 인덱스를 나타냅니다. 즉, 하나는 배열의 요소 수보다 작아야 합니다.The number 6 in the array declaration indicates the last index in the array; it is one less than the number of elements in the array.
  • 배열의 각 요소에 값을 할당합니다.It assigns values to each element in the array. 배열 요소는 배열 이름을 사용 하 여 괄호 안에 있는 개별 요소의 인덱스를 포함 하 여 액세스 됩니다.Array elements are accessed by using the array name and including the index of the individual element in parentheses.
  • 배열의 각 값을 나열합니다.It lists each value of the array. 이 예제에서는 사용을 For 인덱스 번호로 배열의 각 요소에 액세스 하는 문입니다.The example uses a For statement to access each element of the array by its index number.

students 앞의 예제에서 배열 하나의 인덱스를 사용 하기 때문에 1 차원 배열입니다.The students array in the preceding example is a one-dimensional array because it uses one index. 둘 이상의 인덱스 또는 아래 첨자를 사용 하는 배열 이라고 다차원합니다.An array that uses more than one index or subscript is called multidimensional. 자세한 내용은이 문서의 나머지 부분을 참조 하세요. 및 Array Dimensions in Visual Basic합니다.For more information, see the rest of this article and Array Dimensions in Visual Basic.

배열 만들기Creating an array

여러 가지 방법으로 배열의 크기를 정의할 수 있습니다.You can define the size of an array in several ways:

  • 배열 선언 되 면 크기를 지정할 수 있습니다.You can specify the size when the array is declared:

    ' Declare an array with 10 elements.
    Dim cargoWeights(9) As Double               
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(23, 1) As Integer
    ' Declare a jagged array with 31 elements.
    Dim januaryInquiries(30)() As String
    
  • 사용할 수는 New 절을 만들 때 배열의 크기를 제공 합니다.You can use a New clause to supply the size of an array when it’s created:

    ' Declare an array with 10 elements.
    Dim cargoWeights(9) As Double
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(23, 1) As Integer
    ' Declare a jagged array with 31 elements. 
    Dim januaryInquiries(30)() As String
    

기존 배열에 있는 경우 사용 하 여 해당 크기를 재정의할 수 있습니다 합니다 ReDim 문입니다.If you have an existing array, you can redefine its size by using the ReDim statement. 지정할 수 있습니다는 ReDim 문이 배열에 있는 값을 유지 하거나 빈 배열을 만들도록 지정할 수 있습니다.You can specify that the ReDim statement keep the values that are in the array, or you can specify that it create an empty array. 다음 예제에서는 ReDim 문을 사용하여 기존 배열의 크기를 수정하는 여러 가지 방법을 보여 줍니다.The following example shows different uses of the ReDim statement to modify the size of an existing array.

' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)

자세한 내용은 참조는 ReDim 문합니다.For more information, see the ReDim Statement.

배열에 값 저장Storing values in an array

Integer형식의 인덱스를 사용하여 배열의 각 위치에 액세스할 수 있습니다.You can access each location in an array by using an index of type Integer. 괄호로 묶인 해당 인덱스를 통해 각 배열 위치를 참조하여 배열에 값을 저장하고 검색할 수 있습니다.You can store and retrieve values in an array by referencing each array location by using its index enclosed in parentheses. 다차원 배열에 대 한 인덱스는 쉼표 (,)로 구분 됩니다.Indexes for multidimensional arrays are separated by commas (,). 각 배열 차원에 대해 하나의 인덱스가 필요합니다.You need one index for each array dimension.

다음 예제에서는 배열에서 값을 검색 및 저장 하는 몇 가지 문을 보여 줍니다.The following example shows some statements that store and retrieve values in arrays.


Module Example
   Public Sub Main()
      ' Create a 10-element integer array.
      Dim numbers(9) As Integer
      Dim value As Integer = 2
        
      ' Write values to it.
      For ctr As Integer = 0 To 9
         numbers(ctr) = value
         value *= 2
      Next
        
      ' Read and sum the array values.  
      Dim sum As Integer
      For ctr As Integer = 0 To 9
         sum += numbers(ctr)
      Next
      Console.WriteLine($"The sum of the values is {sum:N0}")
    End Sub
End Module
' The example displays the following output:
'     The sum of the values is 2,046

배열 리터럴 사용 하 여 배열 채우기Populating an array with array literals

배열 리터럴을 사용 하 여 동시에 만들 배열 값의 초기 집합으로 채울 수 있습니다.By using an array literal, you can populate an array with an initial set of values at the same time that you create it. 배열 리터럴은 중괄호({})로 묶인 쉼표로 구분된 값 목록으로 구성됩니다.An array literal consists of a list of comma-separated values that are enclosed in braces ({}).

배열 리터럴을 사용하여 배열을 만드는 경우 배열 형식을 제공하거나 형식 유추를 사용하여 배열 형식을 결정할 수 있습니다.When you create an array by using an array literal, you can either supply the array type or use type inference to determine the array type. 다음 예제에서는 두 옵션을 보여 줍니다.The following example shows both options.

' Array literals with explicit type definition.
Dim numbers = New Integer() {1, 2, 4, 8}
' Array literals with type inference.
Dim doubles = {1.5, 2, 9.9, 18}
' Array literals with explicit type definition.
Dim articles() As String = { "the", "a", "an" }

' Array literals with explicit widening type definition.
Dim values() As Double = { 1, 2, 3, 4, 5 }

형식 유추를 사용 하는 경우는 배열 형식에 의해 결정 됩니다는 기준 형식 리터럴 값의 목록에서입니다.When you use type inference, the type of the array is determined by the dominant type in the list of literal values. 기준 형식은 배열의 다른 모든 형식과 넓힐 수 있는 형식이입니다.The dominant type is the type to which all other types in the array can widen. 이 고유 형식을 확인할 수 없는 경우 기준 형식은 배열의 다른 모든 형식이 축소될 수 있는 고유 형식입니다.If this unique type can’t be determined, the dominant type is the unique type to which all other types in the array can narrow. 이러한 고유 형식을 모두 확인할 수 없는 경우 기준 형식은 Object입니다.If neither of these unique types can be determined, the dominant type is Object. 예를 들어 배열 리터럴에 제공된 값 목록이 Integer, LongDouble형식의 값을 포함하는 경우 결과 배열은 Double형식입니다.For example, if the list of values that’s supplied to the array literal contains values of type Integer, Long, and Double, the resulting array is of type Double. 때문에 Integer 하 고 Long 로 확장 Double, Double 기준 형식입니다.Because Integer and Long widen only to Double, Double is the dominant type. 자세한 내용은 Widening and Narrowing Conversions을 참조하세요.For more information, see Widening and Narrowing Conversions.

참고

형식 유추에서 형식 멤버를 지역 변수로 정의 된 배열에만 사용할 수 있습니다.You can use type inference only for arrays that are defined as local variables in a type member. 클래스 수준에서 배열 리터럴을 사용 하 여 정의 하는 배열 형식의 명시적 형식 정의 없으면 Object[]합니다.If an explicit type definition is absent, arrays defined with array literals at the class level are of type Object[]. 자세한 내용은 지역 형식 유추합니다.For more information, see Local type inference.

앞의 예제를 정의 하는 참고 values 형식의 배열로 Double 형식의 모든 배열 리터럴에 있더라도 Integer합니다.Note that the previous example defines values as an array of type Double even though all the array literals are of type Integer. 배열 리터럴의 값을 변환할 수 있으므로이 배열을 만들 수 있습니다 Double 값입니다.You can create this array because the values in the array literal can widen to Double values.

또한 만들기를 사용 하 여 다차원 배열을 채웁니다 배열 리터럴을 중첩합니다.You can also create and populate a multidimensional array by using nested array literals. 중첩 된 배열 리터럴 결과 배열을 사용 하 여 일치 하는 차원 수가 있어야 합니다.Nested array literals must have a number of dimensions that’s consistent with the resulting array. 다음 예제에서는 중첩 된 배열 리터럴을 사용 하 여 정수의 2 차원 배열을 만듭니다.The following example creates a two-dimensional array of integers by using nested array literals.

' Create and populate a 2 x 2 array.
Dim grid1 = {{1, 2}, {3, 4}}
' Create and populate a 2 x 2 array with 3 elements.
Dim grid2(,) = {{1, 2}, {3, 4}, {5, 6}}

중첩 된 배열 리터럴을 사용 하 여 만들고 채울 배열을 중첩 된 배열 리터럴의 요소 수가 일치 하지 않는 경우 오류가 발생 합니다.When using nested array literals to create and populate an array, an error occurs if the number of elements in the nested array literals don't match. 배열 리터럴 보다 차원 수가 다른 배열 변수를 명시적으로 선언 하는 경우에 오류가 발생 합니다.An error also occurs if you explicitly declare the array variable to have a different number of dimensions than the array literals.

1 차원 배열에 대 한 가능한 것 처럼 중첩 된 배열 리터럴을 사용 하 여 다차원 배열을 만들 때 형식 유추를 사용할 수 있습니다.Just as you can for one-dimensional arrays, you can rely on type inference when creating a multidimensional array with nested array literals. 유추 된 유형 모든 중첩 수준에 대 한 모든 배열 리터럴에 있는 모든 값에 대 한 기준 형식이입니다.The inferred type is the dominant type for all the values in all the array literals for all nesting level. 다음 예제에서는 형식의 2 차원 배열을 만듭니다 Double[,] 형식의 값에서 IntegerDouble입니다.The following example creates a two-dimensional array of type Double[,] from values that are of type Integer and Double.

Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}

추가 예제를 보려면 방법: Visual Basic에서 배열 변수 초기화합니다.For additional examples, see How to: Initialize an Array Variable in Visual Basic.

배열 반복Iterating through an array

가장 높은 가장 낮은 인덱스 또는 높은 배열의 각 요소를 액세스 배열을 통해 반복 하는 경우 가장 낮은 합니다.When you iterate through an array, you access each element in the array from the lowest index to the highest or from the highest to the lowest. 일반적으로 사용 하 여는 에 대 한 중... 다음 문 또는 각각에 대 한 중... 다음 문을 에 배열의 요소를 반복 합니다.Typically, use either the For...Next Statement or the For Each...Next Statement to iterate through the elements of an array. 호출할 수는 배열의 상한이 모르는 경우는 Array.GetUpperBound 메서드를 가장 높은 인덱스 값을 가져옵니다.When you don't know the upper bounds of the array, you can call the Array.GetUpperBound method to get the highest value of the index. 가장 낮은 인덱스 값은 거의 항상 0을 호출할 수 있습니다는 Array.GetLowerBound 메서드를 가장 낮은 인덱스 값을 가져옵니다.Although lowest index value is almost always 0, you can call the Array.GetLowerBound method to get the lowest value of the index.

다음 예제에서는 사용 하 여 1 차원 배열을 반복 합니다 For...Next 문입니다.The following example iterates through a one-dimensional array by using the For...Next statement.


Module IterateArray
   Public Sub Main()
      Dim numbers = {10, 20, 30}

      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine(numbers(index))
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30

다음 예제에서는 사용 하 여 다차원 배열을 반복을 For...Next 문입니다.The following example iterates through a multidimensional array by using a For...Next statement. GetUpperBound 메서드에는 차원을 지정하는 매개 변수가 있습니다.The GetUpperBound method has a parameter that specifies the dimension. GetUpperBound(0) 첫 번째 차원의 가장 높은 인덱스를 반환 하 고 GetUpperBound(1) 가장 높은 두 번째 차원 인덱스를 반환 합니다.GetUpperBound(0) returns the highest index of the first dimension, and GetUpperBound(1) returns the highest index of the second dimension.


Module IterateArray
   Public Sub Main()
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
' Output 
'  1 2 
'  3 4 
'  5 6

다음 예제에서는 각각에 대 한 중... 다음 문을1 차원 배열과 2 차원 배열을 반복 하 합니다.The following example uses a For Each...Next Statementto iterate through a one-dimensional array and a two-dimensional array.


Module IterateWithForEach
   Public Sub Main()
      ' Declare and iterate through a one-dimensional array.
      Dim numbers1 = {10, 20, 30}
      
      For Each number In numbers1
         Console.WriteLine(number)
      Next
      Console.WriteLine()
      
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For Each number In numbers
         Console.WriteLine(number)
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30
'
'  1
'  2
'  3
'  4
'  5
'  6

배열 크기Array size

배열 크기는 모든 차원의 길이 곱입니다.The size of an array is the product of the lengths of all its dimensions. 현재 배열에 포함된 요소의 총 수를 나타냅니다.It represents the total number of elements currently contained in the array. 예를 들어, 다음 예제에서는 각 차원에 4 개의 요소가 있는 2 차원 배열을 선언합니다.For example, the following example declares a 2-dimensional array with four elements in each dimension. 배열의 크기는 16 예제의 출력에서 볼 수 있듯이 (또는 (3 + 1) * (3 + 1).As the output from the example shows, the array's size is 16 (or (3 + 1) * (3 + 1).


Module Example
   Public Sub Main()
      Dim arr(3, 3) As Integer
      Console.WriteLine(arr.Length)     
   End Sub
End Module
' The example displays the following output:
'     16

참고

이 설명은 배열 크기는 가변된 배열에는 적용 되지 않습니다.This discussion of array size does not apply to jagged arrays. 가변된 배열 및 가변 배열의 크기를 결정에 대 한 내용은 참조는 가변 배열 섹션입니다.For information on jagged arrays and determining the size of a jagged array, see the Jagged arrays section.

Array.Length 속성을 사용하여 배열의 크기를 찾을 수 있습니다.You can find the size of an array by using the Array.Length property. 사용 하 여 다차원 배열의 각 차원 길이 찾을 수는 Array.GetLength 메서드.You can find the length of each dimension of a multidimensional array by using the Array.GetLength method.

새 배열 개체를 할당 하 여 또는 사용 하 여 배열 변수의 크기를 조정할 수 있습니다 합니다 ReDim 문입니다.You can resize an array variable by assigning a new array object to it or by using the ReDim Statement statement. 다음 예제에서는 ReDim 51 요소 배열에는 100 개의 요소로 이루어진 배열을 변경 하려면.The following example uses the ReDim statement to change a 100-element array to a 51-element array.


Module Example
   Public Sub Main()
      Dim arr(99) As Integer
      Console.WriteLine(arr.Length)
      
      Redim arr(50)
      Console.WriteLine(arr.Length)
   End Sub
End Module
' The example displays the following output:
'     100
'     51

 

배열의 크기를 처리할 때 유의해야 하는 여러 가지 사항이 있습니다.There are several things to keep in mind when dealing with the size of an array.

차원 길이Dimension Length 각 차원의 인덱스는 0 기반, 즉,이 범위는 0부터 상한입니다.The index of each dimension is 0-based, which means it ranges from 0 to its upper bound. 따라서 지정 된 차원의 길이 해당 차원의 선언된 된 상한 보다 큰 하나입니다.Therefore, the length of a given dimension is one greater than the declared upper bound of that dimension.
길이 제한Length Limits 배열의 각 차원 길이 최대 값 제한 합니다 Integer 데이터 형식, 즉 Int32.MaxValue 또는 (2 ^31)-1입니다.The length of every dimension of an array is limited to the maximum value of the Integer data type, which is Int32.MaxValue or (2 ^ 31) - 1. 그러나 배열의 총 크기는 시스템에서 사용 가능한 메모리에 의해서도 제한됩니다.However, the total size of an array is also limited by the memory available on your system. 배열을 초기화 하려고 하면 사용 가능한 메모리 양을 초과 하는, 런타임에서 throw는 OutOfMemoryException합니다.If you attempt to initialize an array that exceeds the amount of available memory, the runtime throws an OutOfMemoryException.
크기 및 요소 크기Size and Element Size 배열의 크기는 해당 요소의 데이터 형식과 독립적입니다.An array's size is independent of the data type of its elements. 크기는 항상 메모리에 사용 하는 바이트 수가 아니라 요소의 총 수를 나타냅니다.The size always represents the total number of elements, not the number of bytes that they consume in memory.
메모리 소비Memory Consumption 배열이 메모리에 저장되는 방법에 대해서는 어떠한 가정도 하지 않는 것이 좋습니다.It is not safe to make any assumptions regarding how an array is stored in memory. 스토리지는 각 데이터 너비의 플랫폼마다 달라지므로 동일한 배열이 32비트 시스템보다 64비트 시스템에서 더 많은 메모리를 사용할 수 있습니다.Storage varies on platforms of different data widths, so the same array can consume more memory on a 64-bit system than on a 32-bit system. 시스템 구성에 따라 배열을 초기화할 때 CLR(공용 언어 런타임)에서 스토리지를 할당하여 요소를 최대한 가깝게 압축하거나 모두 일반적인 하드웨어 경계에 맞출 수 있습니다.Depending on system configuration when you initialize an array, the common language runtime (CLR) can assign storage either to pack elements as close together as possible, or to align them all on natural hardware boundaries. 또한 배열의 제어 정보로 인해 스토리지 오버헤드가 필요하며, 차원이 추가될 때마다 이 오버헤드가 증가합니다.Also, an array requires a storage overhead for its control information, and this overhead increases with each added dimension.

배열 형식The array type

각 배열에는 해당 요소의 데이터 형식을 다른 데이터 형식입니다.Every array has a data type, which differs from the data type of its elements. 모든 배열에 대한 단일 데이터 형식은 없습니다.There is no single data type for all arrays. 대신, 배열의 데이터 형식은 배열의 차원 수 또는 차수와 배열에 있는 요소의 데이터 형식에 의해 결정됩니다.Instead, the data type of an array is determined by the number of dimensions, or rank, of the array, and the data type of the elements in the array. 두 배열 변수는 동일한 차수 있는 경우에 입력 하 고 해당 요소는 동일한 데이터 형식이 동일한 데이터입니다.Two array variables are of the same data type only when they have the same rank and their elements have the same data type. 배열의 차원 길이 배열 데이터 형식이 영향을 주지 않습니다.The lengths of the dimensions of an array do not influence the array data type.

모든 배열은 System.Array 클래스에서 상속되며 Array 형식으로 변수를 선언할 수 있지만, Array 형식의 배열을 만들 수는 없습니다.Every array inherits from the System.Array class, and you can declare a variable to be of type Array, but you cannot create an array of type Array. 예를 들어, 다음 코드는 선언 되지만 arr 형식으로 변수를 Array 호출는 Array.CreateInstance Object 배열을, 배열의 형식을 인스턴스화하기 위한 메서드를 확인 합니다.For example, although the following code declares the arr variable to be of type Array and calls the Array.CreateInstance method to instantiate the array, the array's type proves to be Object[].


Module Example
   Public Sub Main()
      Dim arr As Array = Array.CreateInstance(GetType(Object), 19)
      Console.WriteLine(arr.Length)
      Console.WriteLine(arr.GetType().Name)
   End Sub
End Module
' The example displays the following output:
'     19
'     Object[]

또한 ReDim 문Array 형식으로 선언된 변수에 대해 작업할 수 없습니다.Also, the ReDim Statement cannot operate on a variable declared as type Array. 이러한 이유로, 및 형식 안전성에 대 한 특정 형식으로 모든 배열을 선언 하는 것이 좋습니다.For these reasons, and for type safety, it is advisable to declare every array as a specific type.

배열이나 해당 요소의 데이터 형식을 여러 가지 방법으로 확인할 수 있습니다.You can find out the data type of either an array or its elements in several ways.

  • 호출할 수 있습니다 합니다 GetType 메서드를 가져올 변수의 Type 변수의 런타임 형식을 나타내는 개체입니다.You can call the GetType method on the variable to get a Type object that represents the run-time type of the variable. Type 개체는 해당 속성과 메서드에 광범위한 정보를 보유합니다.The Type object holds extensive information in its properties and methods.
  • 변수를 전달할 수 있습니다는 TypeName 함수를 한 String 런타임 형식의 이름을 사용 하 여 합니다.You can pass the variable to the TypeName function to get a String with the name of run-time type.

다음 예제에서는 모두 호출 합니다 GetType 메서드 및 TypeName 배열의 형식을 결정 하는 함수입니다.The following example calls the both the GetType method and the TypeName function to determine the type of an array. 배열 형식은 Byte(,)합니다.The array type is Byte(,). 유의 합니다 Type.BaseType 속성 또한는 바이트 배열의 기본 형식임을 나타냅니다는 Array 클래스입니다.Note that the Type.BaseType property also indicates that the base type of the byte array is the Array class.


Module Example
   Public Sub Main()
      Dim bytes(9,9) As Byte
      Console.WriteLine($"Type of {nameof(bytes)} array: {bytes.GetType().Name}")
      Console.WriteLine($"Base class of {nameof(bytes)}: {bytes.GetType().BaseType.Name}")
      Console.WriteLine()
      Console.WriteLine($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
   End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
' 
' Type of bytes array: Byte(,)


반환 값 및 매개 변수로 사용 되는 배열Arrays as return values and parameters

Function 프로시저에서 배열을 반환하려면 배열 데이터 형식 및 차원 수를 Function 문의 반환 형식으로 지정합니다.To return an array from a Function procedure, specify the array data type and the number of dimensions as the return type of the Function Statement. 함수 내에서 동일한 데이터 형식 및 차원 수의 지역 배열 변수를 선언합니다.Within the function, declare a local array variable with same data type and number of dimensions. Return 문에 지역 배열 변수를 괄호 없이 포함합니다.In the Return Statement, include the local array variable without parentheses.

Sub 또는 Function 프로시저에 대한 매개 변수로 배열을 지정하려면 지정된 데이터 형식 및 차원 수의 배열로 매개 변수를 정의합니다.To specify an array as a parameter to a Sub or Function procedure, define the parameter as an array with a specified data type and number of dimensions. 프로시저 호출에서 동일한 데이터 형식 및 차원 수를 사용 하 여 배열 변수를 전달 합니다.In the call to the procedure, pass an array variable with the same data type and number of dimensions.

다음 예제에서는 GetNumbers 함수에서 반환을 Integer(), 형식의 1 차원 배열을 Integer합니다.In the following example, the GetNumbers function returns an Integer(), a one-dimensional array of type Integer. ShowNumbers 프로시저는 Integer() 인수를 사용합니다.The ShowNumbers procedure accepts an Integer() argument.


Module ReturnValuesAndParams
   Public Sub Main()
      Dim numbers As Integer() = GetNumbers()
      ShowNumbers(numbers)
   End Sub

   Private Function GetNumbers() As Integer()
      Dim numbers As Integer() = {10, 20, 30}
      Return numbers
   End Function

   Private Sub ShowNumbers(numbers As Integer())
      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine($"{numbers(index)} ")
      Next
   End Sub
End Module
' The example displays the following output:
'   10
'   20
'   30
    

다음 예제에서는 GetNumbersMultiDim 함수에서 반환을 Integer(,), 형식의 2 차원 배열을 Integer합니다.In the following example, the GetNumbersMultiDim function returns an Integer(,), a two-dimensional array of type Integer. ShowNumbersMultiDim 프로시저는 Integer(,) 인수를 사용합니다.The ShowNumbersMultiDim procedure accepts an Integer(,) argument.


Module Example
   Public Sub Main()
      Dim numbers As Integer(,) = GetNumbersMultidim()
      ShowNumbersMultidim(numbers)
   End Sub

   Private Function GetNumbersMultidim() As Integer(,)
      Dim numbers As Integer(,) = {{1, 2}, {3, 4}, {5, 6}}
      Return numbers
   End Function

   Private Sub ShowNumbersMultidim(numbers As Integer(,))
      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'     1 2
'     3 4
'     5 6

가변 배열Jagged arrays

애플리케이션의 데이터 구조가 2차원 배열이지만 사각형이 아닌 경우도 있습니다.Sometimes the data structure in your application is two-dimensional but not rectangular. 예를 들어, 해당 월의 각 날짜의 최고 기온에 대 한 데이터를 저장할 배열을 사용할 수 있습니다.For example, you might use an array to store data about the high temperature of each day of the month. 배열의 첫 번째 차원에는 월을 나타내는 하지만 두 번째 차원의 일 수를 나타내는 아니며 그 달의 일 수가 균일 한 합니다.The first dimension of the array represents the month, but the second dimension represents the number of days, and the number of days in a month is not uniform. 가변된 배열을는 라고는 배열로 이루어진 배열, 이러한 시나리오에 대 한 설계 되었습니다.A jagged array, which is also called an array of arrays, is designed for such scenarios. 가변된 배열에 요소가 들어 있는 배열도 배열이입니다.A jagged array is an array whose elements are also arrays. 가변 배열 및 가변 배열의 각 요소에는 하나 이상의 차원이 있을 수 있습니다.A jagged array and each element in a jagged array can have one or more dimensions.

다음 예제는 각 요소가 일 배열인 월의 배열을 사용 합니다.The following example uses an array of months, each element of which is an array of days. 이 예제에서는 월에 다른 일 수 있으므로 가변된 배열을 사용 합니다.The example uses a jagged array because different months have different numbers of days. 이 예제에서는 가변된 배열을 만들고, 값을 할당, 검색 및 해당 값을 표시 하는 방법을 보여 줍니다.The example shows how to create a jagged array, assign values to it, and retrieve and display its values.

Imports System.Globalization

Module JaggedArray
   Public Sub Main()
      ' Declare the jagged array of 12 elements. Each element is an array of Double.
      Dim sales(11)() As Double
      ' Set each element of the sales array to a Double array of the appropriate size.
      For month As Integer = 0 To 11
         ' The number of days in the month determines the appropriate size.
         Dim daysInMonth As Integer =
            DateTime.DaysInMonth(Year(Now), month + 1)
         sales(month) = New Double(daysInMonth - 1) {}
      Next 

      ' Store values in each element.
      For month As Integer = 0 To 11
         For dayOfMonth = 0 To sales(month).GetUpperBound(0)
            sales(month)(dayOfMonth) = (month * 100) + dayOfMonth
         Next
      Next

      ' Retrieve and display the array values.
      Dim monthNames = DateTimeFormatInfo.CurrentInfo.AbbreviatedMonthNames
      ' Display the month names.
      Console.Write("    ")
      For ctr = 0 To sales.GetUpperBound(0)
         Console.Write($" {monthNames(ctr)}   ")
      Next   
      Console.WriteLine()
      ' Display data for each day in each month.
      For dayInMonth = 0 To 30
         Console.Write($"{dayInMonth + 1,2}.  ")
         For monthNumber = 0 To sales.GetUpperBound(0)
            If dayInMonth > sales(monthNumber).GetUpperBound(0) Then 
               Console.Write("       ")
            Else
               Console.Write($"{sales(monthNumber)(dayInMonth),-5}  ")
            End If
         Next   
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'      Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
'  1.  0      100    200    300    400    500    600    700    800    900    1000   1100
'  2.  1      101    201    301    401    501    601    701    801    901    1001   1101
'  3.  2      102    202    302    402    502    602    702    802    902    1002   1102
'  4.  3      103    203    303    403    503    603    703    803    903    1003   1103
'  5.  4      104    204    304    404    504    604    704    804    904    1004   1104
'  6.  5      105    205    305    405    505    605    705    805    905    1005   1105
'  7.  6      106    206    306    406    506    606    706    806    906    1006   1106
'  8.  7      107    207    307    407    507    607    707    807    907    1007   1107
'  9.  8      108    208    308    408    508    608    708    808    908    1008   1108
' 10.  9      109    209    309    409    509    609    709    809    909    1009   1109
' 11.  10     110    210    310    410    510    610    710    810    910    1010   1110
' 12.  11     111    211    311    411    511    611    711    811    911    1011   1111
' 13.  12     112    212    312    412    512    612    712    812    912    1012   1112
' 14.  13     113    213    313    413    513    613    713    813    913    1013   1113
' 15.  14     114    214    314    414    514    614    714    814    914    1014   1114
' 16.  15     115    215    315    415    515    615    715    815    915    1015   1115
' 17.  16     116    216    316    416    516    616    716    816    916    1016   1116
' 18.  17     117    217    317    417    517    617    717    817    917    1017   1117
' 19.  18     118    218    318    418    518    618    718    818    918    1018   1118
' 20.  19     119    219    319    419    519    619    719    819    919    1019   1119
' 21.  20     120    220    320    420    520    620    720    820    920    1020   1120
' 22.  21     121    221    321    421    521    621    721    821    921    1021   1121
' 23.  22     122    222    322    422    522    622    722    822    922    1022   1122
' 24.  23     123    223    323    423    523    623    723    823    923    1023   1123
' 25.  24     124    224    324    424    524    624    724    824    924    1024   1124
' 26.  25     125    225    325    425    525    625    725    825    925    1025   1125
' 27.  26     126    226    326    426    526    626    726    826    926    1026   1126
' 28.  27     127    227    327    427    527    627    727    827    927    1027   1127
' 29.  28            228    328    428    528    628    728    828    928    1028   1128
' 30.  29            229    329    429    529    629    729    829    929    1029   1129
' 31.  30            230           430           630    730           930           1130

앞의 예제를 사용 하 여 요소 별로 단위로 가변된 배열에 값을 할당 한 For...Next 루프입니다.The previous example assigns values to the jagged array on an element-by-element basis by using a For...Next loop. 또한 가변 배열의 요소에 중첩 된 배열 리터럴을 사용 하 여 값을 할당할 수 있습니다.You can also assign values to the elements of a jagged array by using nested array literals. 그러나 사용 하려고 중첩 배열 리터럴 (예를 들어 Dim valuesjagged = {{1, 2}, {2, 3, 4}}) 컴파일러 오류가 BC30568합니다.However, the attempt to use nested array literals (for example, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) generates compiler error BC30568. 오류를 해결 하려면 내부 배열 리터럴을 괄호로 묶어야 합니다.To correct the error, enclose the inner array literals in parentheses. 괄호는 배열 리터럴 식이 평가 되 고, 강제 하 고 결과 값은 다음 예제와 같이 외부 배열 리터럴과 사용 하 여 사용 됩니다.The parentheses force the array literal expression to be evaluated, and the resulting values are used with the outer array literal, as the following example shows.


Module Example
   Public Sub Main()
      Dim values1d = { 1, 2, 3 }
      Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
      Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
   End Sub
End Module

가변된 배열에 요소가 배열을 포함할 1 차원 배열이입니다.A jagged array is a one-dimensional array whose elements contain arrays. 따라서 합니다 Array.Length 속성 및 Array.GetLength(0) 1 차원 배열에 있는 요소의 개수를 반환 하는 메서드 및 Array.GetLength(1) throw는 IndexOutOfRangeException 가변된 배열을 다차원 없기 때문에 합니다.Therefore, the Array.Length property and the Array.GetLength(0) method return the number of elements in the one-dimensional array, and Array.GetLength(1) throws an IndexOutOfRangeException because a jagged array is not multidimensional. 각 하위 문자열의 값을 검색 하 여 각 하위 배열에 있는 요소의 수를 결정 Array.Length 속성입니다.You determine the number of elements in each subarray by retrieving the value of each subarray's Array.Length property. 다음 예제에서는 가변된 배열의 요소 수를 결정 하는 방법을 보여 줍니다.The following example illustrates how to determine the number of elements in a jagged array.


Module Example
   Public Sub Main()
      Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
      Console.WriteLine($"The value of jagged.Length: {jagged.Length}.")
      Dim total = jagged.Length
      For ctr As Integer = 0 To jagged.GetUpperBound(0)
         Console.WriteLine($"Element {ctr + 1} has {jagged(ctr).Length} elements.") 
         total += jagged(ctr).Length 
      Next
      Console.WriteLine($"The total number of elements in the jagged array: {total}")
   End Sub
End Module
' The example displays the following output:
'     The value of jagged.Length: 4.
'     Element 1 has 2 elements.
'     Element 2 has 3 elements.
'     Element 3 has 2 elements.
'     Element 4 has 4 elements.
'     The total number of elements in the jagged array: 15

길이가 0 인 배열Zero-length arrays

Visual Basic 초기화 되지 않은 배열 구별 (값이 배열을 Nothing) 및 길이가 0 인 배열을 이거나 빈 배열 (요소가 없는 배열입니다.) 초기화 되지 않은 배열이 차원이 구분 되지 않습니다는 하나 또는 모든 값을 할당 합니다.Visual Basic differentiates between a uninitialized array (an array whose value is Nothing) and a zero-length array or empty array (an array that has no elements.) An uninitialized array is one that has not been dimensioned or had any values assigned to it. 예를 들어 다음과 같습니다.For example:

Dim arr() As String

길이가 0 인 배열은 1 차원으로 선언 됩니다.A zero-length array is declared with a dimension of -1. 예를 들어 다음과 같습니다.For example:

Dim arrZ(-1) As String

다음과 같은 경우 길이가 0인 배열을 만들어야 할 수도 있습니다.You might need to create a zero-length array under the following circumstances:

  • 위험 없이 NullReferenceException 예외를 코드의 멤버에 액세스 해야 합니다는 Array 클래스와 같이 Length 또는 Rank와 같은 Visual Basic 함수를 호출 하거나 UBound합니다.Without risking a NullReferenceException exception, your code must access members of the Array class, such as Length or Rank, or call a Visual Basic function such as UBound.

  • 확인 하지 않고 코드를 단순하게 유지 하려는 Nothing 특수 한 경우.You want to keep your code simple by not having to check for Nothing as a special case.

  • 코드가 하나 이상의 프로시저에 길이가 0인 배열을 전달해야 하거나 하나 이상의 프로시저에서 길이가 0인 배열을 반환하는 API(애플리케이션 프로그래밍 인터페이스)와 상호 작용하는 경우Your code interacts with an application programming interface (API) that either requires you to pass a zero-length array to one or more procedures or returns a zero-length array from one or more procedures.

배열 분Splitting an array

경우에 따라 여러 배열을 단일 배열로 분할 해야 합니다.In some cases, you may need to split a single array into multiple arrays. 분할할 배열 되는 점을 식별 하 고 다음 배열 두 개 이상의 별도 배열로 스 피팅이 포함 됩니다.This involves identifying the point or points at which the array is to be split, and then spitting the array into two or more separate arrays.

참고

이 섹션에서는 단일 문자열 구분 기호에 따라 문자열 배열로 분할 하는 것을 설명 하지 않습니다.This section does not discuss splitting a single string into a string array based on some delimiter. 문자열 분할에 대 한 내용은 참조는 String.Split 메서드.For information on splitting a string, see the String.Split method.

배열 분할에 대 한 가장 일반적인 기준은 다음과 같습니다.The most common criteria for splitting an array are:

  • 배열의 요소 수입니다.The number of elements in the array. 예를 들어 다음 배열의 지정 된 수의 요소를 보다 다양 한 약 균등 한 부분으로 분할 하는 것이 좋습니다.For example, you might want to split an array of more than a specified number of elements into a number of approximately equal parts. 이 작업을 위해 값을 반환 하거나 사용할 수는 Array.Length 또는 Array.GetLength 메서드.For this purpose, you can use the value returned by either the Array.Length or Array.GetLength method.

  • 배열의 위치를 나타내는 구분 기호로 사용 되는 요소의 값을 분할 해야 합니다.The value of an element, which serves as a delimiter that indicates where the array should be split. 호출 하 여 특정 값을 검색할 수 있습니다 합니다 Array.FindIndexArray.FindLastIndex 메서드.You can search for a specific value by calling the Array.FindIndex and Array.FindLastIndex methods.

다음 호출 하 여 개별 배열 배열을 분할 해야 하는 인덱스를 결정 한 후 만들면는 Array.Copy 메서드.Once you've determined the index or indexes at which the array should be split, you can then create the individual arrays by calling the Array.Copy method.

다음 예제에서는 두 개의 배열로 대략 동일한 크기의 배열을 분할합니다.The following example splits an array into two arrays of approximately equal size. (배열 요소의 총 홀수 이면 첫 번째 배열에 두 번째 보다 더 많은 요소가 하나 있습니다.)(If the total number of array elements is odd, the first array has one more element than the second.)


Module Example
   Public Sub Main()
      ' Create an array of 100 elements.
      Dim arr(99) As Integer
      ' Populate the array.
      Dim rnd As new Random()
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = rnd.Next()
      Next
      
      ' Determine how many elements should be in each array.
      Dim divisor = 2
      Dim remainder As Integer
      Dim boundary = Math.DivRem(arr.GetLength(0), divisor, remainder)
            
      ' Copy the array.
      Dim arr1(boundary - 1 + remainder), arr2(boundary - 1) as Integer
      Array.Copy(arr, 0, arr1, 0, boundary + remainder)
      Array.Copy(arr, boundary + remainder, arr2, 0, arr.Length - boundary) 
   End Sub
End Module

다음 예제에서는 문자열 배열 값이 배열 구분 기호로 사용 되는 "zzz" 요소의 유무에 따라 두 개의 배열을 분할 합니다.The following example splits a string array into two arrays based on the presence of an element whose value is "zzz", which serves as the array delimiter. 새 배열 구분 기호를 포함 하는 요소를 포함 하지 않습니다.The new arrays do not include the element that contains the delimiter.


Module Example
   Public Sub Main()
      Dim rnd As New Random()
      
      ' Create an array of 100 elements.
      Dim arr(99) As String
      ' Populate each element with an arbitrary ASCII character.
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = ChrW(Rnd.Next(&h21, &h7F))
      Next
      ' Get a random number that will represent the point to insert the delimiter.
      arr(rnd.Next(0, arr.GetUpperBound(0))) = "zzz"

      ' Find the delimiter.
      Dim location = Array.FindIndex(arr, Function(x) x = "zzz")

      ' Create the arrays.
      Dim arr1(location - 1) As String
      Dim arr2(arr.GetUpperBound(0) - location - 1) As String
      
      ' Populate the two arrays.
      Array.Copy(arr, 0, arr1, 0, location)
      Array.Copy(arr, location + 1, arr2, 0, arr.GetUpperBound(0) - location)
   End Sub
End Module

배열에 가입Joining arrays

또한 단일 큰 배열을 배열의 수를 결합할 수 있습니다.You can also combine a number of arrays into a single larger array. 또한 사용이 작업을 수행 하는 Array.Copy 메서드.To do this, you also use the Array.Copy method.

참고

이 섹션에서는 문자열 배열을 단일 문자열로 조인 하는 것을 설명 하지 않습니다.This section does not discuss joining a string array into a single string. 조인 하는 문자열 배열에 대 한 내용은 참조는 String.Join 메서드.For information on joining a string array, see the String.Join method.

각 배열의 요소를 새 배열에 복사 하기 전에 먼저 새 배열에 맞게 충분히 큰 되도록 배열 초기화 확인 해야 합니다.Before copying the elements of each array into the new array, you must first ensure that you have initialized the array so that it is large enough to accommodate the new array. 이 작업은 다음 두 가지 방법 중 하나로 수행할 수 있습니다.You can do this in one of two ways:

  • 사용 된 ReDim Preserve 문을 동적으로 배열에 새 요소를 추가 하기 전에 확장.Use the ReDim Preserve statement to dynamically expand the array before adding new elements to it. 이것이 가장 쉬운 방법 이지만 대형 배열을 복사 하는 경우 성능 저하 및 과도 한 메모리 소비에서 발생할 수 있습니다.This is the easiest technique, but it can result in performance degradation and excessive memory consumption when you are copying large arrays.
  • 새 큰 배열에 대해 필요한 요소의 총 수를 계산 다음 원본 배열의 각 요소를 추가 합니다.Calculate the total number of elements needed for the new large array, then add the elements of each source array to it.

다음 예제에서는 10 개의 요소를 사용 하 여 4 개의 배열을 단일 배열로에 추가할 두 번째 방법을 사용 합니다.The following example uses the second approach to add four arrays with ten elements each to a single array.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())
       ' Compute the number of elements in all arrays.
       Dim elements = 0
       For Each task In tasks
          elements += task.Result.Length
       Next
       Dim newArray(elements - 1) As Integer
       Dim index = 0
       For Each task In tasks
          Dim n = task.Result.Length
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

되므로 경우 원본 배열의 모든 작은, 각 새 배열의 요소를 추가 하는 대로 배열 동적으로 확장 수 있습니다.Since in this case the source arrays are all small, we can also dynamically expand the array as we add the elements of each new array to it. 다음 예제에서는 해당 작업을 수행합니다.The following example does that.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())

       ' Dimension the target array and copy each element of each source array to it.
       Dim newArray() As Integer = {}
       ' Define the next position to copy to in newArray.
       Dim index = 0
       For Each task In tasks
          Dim n = Task.Result.Length
          ReDim Preserve newArray(newArray.GetUpperBound(0) + n)
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

배열의 대 안으로 컬렉션Collections as an alternative to arrays

배열은 고정된 개수의 강력한 형식 개체를 만들고 작업하는 데 가장 유용합니다.Arrays are most useful for creating and working with a fixed number of strongly typed objects. 컬렉션은 개체 그룹에 대해 작업하는 보다 유연한 방법을 제공합니다.Collections provide a more flexible way to work with groups of objects. 배열과 달리,이 있는 배열의 크기를 명시적으로 변경 하는 필요 합니다 ReDim, 컬렉션 증가 및는 응용 프로그램 변경이 필요에 따라 동적으로 축소 합니다.Unlike arrays, which require that you explicitly change the size of an array with the ReDim Statement, collections grow and shrink dynamically as the needs of an application change.

사용 하는 경우 ReDim 배열 차원을, Visual Basic 새 배열을 만듭니다를 이전을 해제 합니다.When you use ReDim to redimension an array, Visual Basic creates a new array and releases the previous one. 이 경우 실행 시간이 걸립니다.This takes execution time. 따라서 자주 변경 되거나 사용 중인 항목 수가 필요한 항목의 최대 수를 예측할 수 없습니다, 하는 경우 일반적으로 얻을 수 더 나은 성능을 컬렉션을 사용 합니다.Therefore, if the number of items you are working with changes frequently, or you cannot predict the maximum number of items you need, you'll usually obtain better performance by using a collection.

일부 컬렉션의 경우 키를 사용하여 개체를 신속하게 검색할 수 있도록 컬렉션에 추가하는 모든 개체에 키를 할당할 수 있습니다.For some collections, you can assign a key to any object that you put into the collection so that you can quickly retrieve the object by using the key.

컬렉션에 단일 데이터 형식의 요소만 포함된 경우 System.Collections.Generic 네임스페이스의 클래스 중 하나를 사용할 수 있습니다.If your collection contains elements of only one data type, you can use one of the classes in the System.Collections.Generic namespace. 제네릭 컬렉션은 다른 데이터 형식을 추가할 수 없도록 형식 안전성을 적용합니다.A generic collection enforces type safety so that no other data type can be added to it.

항목 컬렉션에 대한 자세한 내용은 컬렉션을 참조하세요.For more information about collections, see Collections.

용어Term 정의Definition
Array Dimensions in Visual BasicArray Dimensions in Visual Basic 배열의 차수 및 차원을 설명합니다.Explains rank and dimensions in arrays.
방법: Visual Basic에서 배열 변수 초기화How to: Initialize an Array Variable in Visual Basic 배열에 초기 값을 채우는 방법을 설명합니다.Describes how to populate arrays with initial values.
방법: Visual Basic에서 배열 정렬How to: Sort An Array in Visual Basic 배열의 요소를 사전순으로 정렬하는 방법을 보여 줍니다.Shows how to sort the elements of an array alphabetically.
방법: 하나의 배열에 다른 배열 할당How to: Assign One Array to Another Array 다른 배열 변수에 배열을 할당하는 규칙 및 단계를 설명합니다.Describes the rules and steps for assigning an array to another array variable.
배열 문제 해결Troubleshooting Arrays 배열에서 작업할 때 발생할 수 있는 몇 가지 일반적인 문제를 설명합니다.Discusses some common problems that arise when working with arrays.

참고 항목See also