Arrays in Visual BasicArrays in Visual Basic

Ein Array ist ein Satz von Werten, die als Elementebezeichnet werden, die logisch miteinander verknüpft sind.An array is a set of values, which are termed elements, that are logically related to each other. Ein Array kann z. b. aus der Anzahl von Schülern in den einzelnen Stufen in einer Grammatikschule bestehen. jedes Element des Arrays ist die Anzahl der Schüler/Studenten in einer einzelnen Klasse.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. Ebenso kann ein Array aus den Noten eines Studenten für eine Klasse bestehen. jedes Element des Arrays ist eine einzelne Klasse.Similarly, an array may consist of a student's grades for a class; each element of the array is a single grade.

Einzelne Variablen können jedes unserer Datenelemente speichern.It is possible individual variables to store each of our data items. Wenn unsere Anwendung z. b. die Studenten Qualitäten analysiert, können wir eine separate Variable für die Qualität der Schüler/Studenten, z. b. englishGrade1, englishGrade2usw., verwenden. Dieser Ansatz hat drei wesentliche Einschränkungen: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:

  • Wir müssen zur Entwurfszeit genau wissen, wie viele Qualitäten verarbeitet werden müssen.We have to know at design time exactly how many grades we have to handle.
  • Die Verarbeitung einer großen Anzahl von Noten wird schnell zu unhandlich.Handling large numbers of grades quickly becomes unwieldy. Dies wiederum führt zu einer größeren Wahrscheinlichkeit, dass eine Anwendung schwerwiegende Fehler aufweist.This in turn makes an application much more likely to have serious bugs.
  • Die Wartung ist schwierig.It is difficult to maintain. Jede neue, von uns hinzu zufügende Stufe erfordert, dass die Anwendung geändert, neu kompiliert und erneut bereitgestellt wird.Each new grade that we add requires that the application be modified, recompiled, and redeployed.

Mithilfe eines Arrays können Sie mit demselben Namen auf diese verknüpften Werte verweisen und eine Zahl verwenden, die als Index oder Index bezeichnet wird, um ein einzelnes Element auf der Grundlage seiner Position im Array zu identifizieren.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. Die Indizes eines Arrays reichen von 0 bis eins kleiner als die Gesamtzahl der Elemente im Array.The indexes of an array range from 0 to one less than the total number of elements in the array. Wenn Sie Visual Basic Syntax verwenden, um die Größe eines Arrays zu definieren, geben Sie den höchsten Index und nicht die Gesamtzahl der Elemente im Array an.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. Sie können mit dem Array als Einheit arbeiten, und durch die Möglichkeit, seine Elemente zu durchlaufen, müssen Sie nicht genau wissen, wie viele Elemente es zur Entwurfszeit enthält.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.

Hier einige Beispiele, bevor wir mit den Erklärungen starten: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 Elemente in einem einfachen ArrayArray elements in a simple array

Wir erstellen nun ein Array mit dem Namen students, um die Anzahl von Schülern in den einzelnen Stufen in einer Grammatikschule zu speichern.Let's create an array named students to store the number of students in each grade in a grammar school. Die Indizes der Elemente reichen von 0 bis 6.The indexes of the elements range from 0 through 6. Die Verwendung dieses Arrays ist einfacher, als sieben Variablen zu deklarieren.Using this array is simpler than declaring seven variables.

Die folgende Abbildung zeigt das students Array.The following illustration shows the students array. Für jedes Element des Arrays gilt:For each element of the array:

  • Der Index des Elements steht für die Jahrgangsstufe (Index 0 (null) steht für die erste Jahrgangsstufe).The index of the element represents the grade (index 0 represents kindergarten).

  • Der im Element enthaltene Wert steht für die Anzahl der Schüler in dieser Jahrgangsstufe.The value that’s contained in the element represents the number of students in that grade.

Diagramm mit einem Array der Anzahl von Schülern

Das folgende Beispiel enthält den Visual Basic Code, der das Array erstellt und verwendet: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

Im Beispiel werden drei Dinge ausgeführt:The example does three things:

  • Er deklariert ein students Array mit sieben Elementen.It declares a students array with seven elements. Die Anzahl 6 in der Array Deklaration gibt den letzten Index im Array an. Es ist ein kleiner als die Anzahl der Elemente im Array.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.
  • Jedem Element im Array werden Werte zugewiesen.It assigns values to each element in the array. Der Zugriff auf Array Elemente erfolgt über den Namen des Arrays und einschließlich des Index des einzelnen Elements in Klammern.Array elements are accessed by using the array name and including the index of the individual element in parentheses.
  • Sie Listet jeden Wert des Arrays auf.It lists each value of the array. Im Beispiel wird eine For -Anweisung verwendet, um auf die einzelnen Elemente des Arrays über die Indexnummer zuzugreifen.The example uses a For statement to access each element of the array by its index number.

Das students Array im vorangehenden Beispiel ist ein eindimensionales Array, da es einen Index verwendet.The students array in the preceding example is a one-dimensional array because it uses one index. Ein Array, das mehr als einen Index oder Index verwendet, wird mehr dimensionalgenannt.An array that uses more than one index or subscript is called multidimensional. Weitere Informationen finden Sie im restlichen Artikel und in den Array Dimensionen in Visual Basic.For more information, see the rest of this article and Array Dimensions in Visual Basic.

Erstellen eines ArraysCreating an array

Sie können die Größe eines Arrays auf verschiedene Arten definieren:You can define the size of an array in several ways:

  • Sie können die Größe angeben, wenn das Array deklariert wird: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
    
  • Mit einer New-Klausel können Sie die Größe eines Arrays bei der Erstellung angeben: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
    

Wenn Sie über ein vorhandenes Array verfügen, können Sie dessen Größe mit der ReDim -Anweisung neu definieren.If you have an existing array, you can redefine its size by using the ReDim statement. Sie können angeben, dass die ReDim-Anweisung die Werte im Array behält, oder Sie können angeben, dass ein leeres Array erstellt werden soll.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. Im folgenden Beispiel werden andere Möglichkeiten veranschaulicht, um mit der ReDim -Anweisung die Größe eines vorhandenen Arrays zu ändern.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)

Weitere Informationen finden Sie in der ReDim-Anweisung.For more information, see the ReDim Statement.

Speichern von Werten in einem ArrayStoring values in an array

Sie können mit einem Index vom Typ Integerauf die einzelnen Positionen in einem Array zugreifen.You can access each location in an array by using an index of type Integer. Die Werte in einem Array können gespeichert und abgerufen werden, indem mit dem entsprechenden in Klammern eingeschlossenen Index auf die einzelnen Arraypositionen verwiesen wird.You can store and retrieve values in an array by referencing each array location by using its index enclosed in parentheses. Indizes für mehrdimensionale Arrays sind durch Kommas (,) getrennt.Indexes for multidimensional arrays are separated by commas (,). Sie benötigen einen Index für jede Arraydimension.You need one index for each array dimension.

Im folgenden Beispiel werden einige Anweisungen gezeigt, die Werte in Arrays speichern und abrufen.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

Auffüllen eines Arrays mit Array literalenPopulating an array with array literals

Mithilfe eines Arrayliterals können Sie ein Array mit einem anfänglichen Satz von Werten gleichzeitig auffüllen, wenn Sie es erstellen.By using an array literal, you can populate an array with an initial set of values at the same time that you create it. Ein Arrayliteral besteht aus einer Liste von durch Trennzeichen getrennten Werten, die in geschweifte Klammern ({}) eingeschlossen sind.An array literal consists of a list of comma-separated values that are enclosed in braces ({}).

Beim Erstellen eines Arrays mit einem Arrayliteral können Sie den Arraytyp entweder angeben oder mittels Typrückschluss bestimmen.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. Im folgenden Beispiel werden beide Optionen gezeigt.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 }

Wenn Sie den Typrückschluss verwenden, wird der Typ des Arrays durch den vorherrschenden Typ in der Liste der Literalwerte bestimmt.When you use type inference, the type of the array is determined by the dominant type in the list of literal values. Der vorherrschende Typ ist der Typ, auf den alle anderen Typen im Array ausgedehnt werden können.The dominant type is the type to which all other types in the array can widen. Wenn dieser eindeutige Typ nicht bestimmt werden kann, ist der bestimmende Typ der eindeutige Typ, auf den alle anderen Typen im Array eingegrenzt werden können.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. Wenn keiner dieser eindeutigen Typen bestimmt werden kann, ist der bestimmende Typ Object.If neither of these unique types can be determined, the dominant type is Object. Wenn die für das Arrayliteral angegebene Liste der Werte z. B. Werte vom Typ Integer, Longund Doubleenthält, weist das erhaltene Array den Typ Doubleauf.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. Da Integer und Long nur auf Doubleausgedehnt werden, ist Double der bestimmende Typ.Because Integer and Long widen only to Double, Double is the dominant type. Weitere Informationen finden Sie unter Widening and Narrowing Conversions.For more information, see Widening and Narrowing Conversions.

Hinweis

Sie können den Typrückschluss nur für Arrays verwenden, die in einem Typmember als lokale Variablen definiert sind.You can use type inference only for arrays that are defined as local variables in a type member. Wenn eine explizite Typdefinition nicht vorhanden ist, sind Arrays, die mit Array literalen auf Klassenebene definiert sind, vom Typ Object[].If an explicit type definition is absent, arrays defined with array literals at the class level are of type Object[]. Weitere Informationen finden Sie unter lokaler Typrückschluss.For more information, see Local type inference.

Beachten Sie, dass das vorherige Beispiel values als Array vom Typ Double definiert, auch wenn alle Array Literale den Typ Integerhaben.Note that the previous example defines values as an array of type Double even though all the array literals are of type Integer. Sie können dieses Array erstellen, da die Werte im arrayliteralwert auf Double Werte ausgedehnt werden können.You can create this array because the values in the array literal can widen to Double values.

Sie können auch ein mehrdimensionales Array erstellen und Auffüllen, indem Sie die Literale des arrayarraysverwenden.You can also create and populate a multidimensional array by using nested array literals. Die Literale für das arsted Array müssen über eine Reihe von Dimensionen verfügen, die mit dem resultierenden Array konsistent sind.Nested array literals must have a number of dimensions that’s consistent with the resulting array. Im folgenden Beispiel wird ein zweidimensionales Array von ganzen Zahlen erstellt, wobei die Literale des arrayarrays verwendet werden.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}}

Wenn Sie zum Erstellen und Auffüllen eines Arrays ein Array verwenden, tritt ein Fehler auf, wenn die Anzahl der Elemente in den nicht übereinten Array literalen nicht entspricht.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. Ein Fehler tritt auch auf, wenn Sie die Array Variable explizit so deklarieren, dass Sie eine andere Anzahl von Dimensionen als die Array Literale hat.An error also occurs if you explicitly declare the array variable to have a different number of dimensions than the array literals.

Ebenso wie bei eindimensionalen Arrays können Sie den Typrückschluss beim Erstellen eines mehrdimensionalen Arrays mit den literalen des masted-Arrays unterstützen.Just as you can for one-dimensional arrays, you can rely on type inference when creating a multidimensional array with nested array literals. Der abherleitet Typ ist der bestimmende Typ für alle Werte in allen Arrayliteralen für alle Schachtelungs Ebenen.The inferred type is the dominant type for all the values in all the array literals for all nesting level. Im folgenden Beispiel wird ein zweidimensionales Array vom Typ erstellt Double[,] aus Werten vom Typ Integer und Double.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}}

Weitere Beispiele finden Sie unter How to: Initialize an Array Variable in Visual Basic (Gewusst wie: Initialisieren einer Arrayvariablen in Visual Basic).For additional examples, see How to: Initialize an Array Variable in Visual Basic.

Durchlaufen eines ArraysIterating through an array

Wenn Sie ein Array durchlaufen, greifen Sie auf jedes Element im Array vom niedrigsten Index bis zum höchsten oder vom höchsten zum niedrigsten zu.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. Verwenden Sie in der Regel entweder den for... Next-Anweisung oder die for each-Anweisung... Nächste Anweisung zum Durchlaufen der Elemente eines Arrays.Typically, use either the For...Next Statement or the For Each...Next Statement to iterate through the elements of an array. Wenn Sie die oberen Begrenzungen des Arrays nicht kennen, können Sie die Array.GetUpperBound-Methode zum Abrufen des höchsten Index Werts abrufen.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. Obwohl der niedrigste Indexwert fast immer 0 ist, können Sie die Array.GetLowerBound-Methode zum Abrufen des niedrigsten Index Werts abrufen.Although lowest index value is almost always 0, you can call the Array.GetLowerBound method to get the lowest value of the index.

Im folgenden Beispiel wird ein eindimensionales Array mithilfe der For...Next -Anweisung durchlaufen.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

Im folgenden Beispiel wird ein mehrdimensionales Array mit einer For...Next -Anweisung durchlaufen.The following example iterates through a multidimensional array by using a For...Next statement. Die GetUpperBound -Methode enthält einen Parameter, der die Dimension angibt.The GetUpperBound method has a parameter that specifies the dimension. GetUpperBound(0) gibt den höchsten Index der ersten Dimension zurück, und GetUpperBound(1) gibt den höchsten Index der zweiten Dimension zurück.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

Im folgenden Beispiel wird ein for each verwendet... Nächste Anweisungzum Durchlaufen eines eindimensionalen Arrays und eines zweidimensionalen Arrays.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 GrößeArray size

Die Größe eines Arrays ist das Produkt der Längen aller seiner Dimensionen.The size of an array is the product of the lengths of all its dimensions. Sie stellt die Gesamtzahl der Elemente dar, die derzeit im Array enthalten sind.It represents the total number of elements currently contained in the array. Im folgenden Beispiel wird z. b. ein zweidimensionales Array mit vier Elementen in jeder Dimension deklariert.For example, the following example declares a 2-dimensional array with four elements in each dimension. Wie die Ausgabe des Beispiels zeigt, ist die Größe des Arrays 16 (oder (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

Hinweis

Diese Erörterung der Array Größe gilt nicht für verzweigte Arrays.This discussion of array size does not apply to jagged arrays. Informationen zu verzweigten Arrays und zum Ermitteln der Größe einer Jagged Array finden Sie im Abschnitt verzweigte Arrays .For information on jagged arrays and determining the size of a jagged array, see the Jagged arrays section.

Sie können die Größe eines Arrays mithilfe der Array.Length-Eigenschaft bestimmen.You can find the size of an array by using the Array.Length property. Sie können die Länge der einzelnen Dimensionen eines mehrdimensionalen Arrays mithilfe der Array.GetLength-Methode ermitteln.You can find the length of each dimension of a multidimensional array by using the Array.GetLength method.

Sie können die Größe einer Array Variablen ändern, indem Sie Ihr ein neues Array Objekt zuweisen oder indem Sie die Anweisung ReDim Anweisung verwenden.You can resize an array variable by assigning a new array object to it or by using the ReDim Statement statement. Im folgenden Beispiel wird die ReDim-Anweisung verwendet, um ein 100-Element-Array in ein 51-Element-Array zu ändern.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

 

Mehrere Faktoren wirken sich auf die Arraygröße aus.There are several things to keep in mind when dealing with the size of an array.

DimensionslängeDimension Length Der Index jeder Dimension ist 0-basiert, d. h., er reicht von 0 bis zur oberen Grenze.The index of each dimension is 0-based, which means it ranges from 0 to its upper bound. Daher ist die Länge einer bestimmten Dimension eine größer als die deklarierte obere Grenze dieser Dimension.Therefore, the length of a given dimension is one greater than the declared upper bound of that dimension.
LängenbeschränkungenLength Limits Die Länge jeder Dimension eines Arrays ist auf den maximalen Wert des Integer Datentyps beschränkt, der Int32.MaxValue oder (2 ^ 31)-1 ist.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. Die Gesamtgröße eines Arrays richtet sich nach dem verfügbaren Arbeitsspeicher des Systems und ist damit ebenfalls beschränkt.However, the total size of an array is also limited by the memory available on your system. Wenn Sie versuchen, ein Array zu initialisieren, das die Menge des verfügbaren Arbeitsspeichers überschreitet, löst die Laufzeit eine OutOfMemoryExceptionaus.If you attempt to initialize an array that exceeds the amount of available memory, the runtime throws an OutOfMemoryException.
Größe und ElementgrößeSize and Element Size Die Größe eines Arrays ist vom Datentyp seiner Elemente unabhängig.An array's size is independent of the data type of its elements. Die Größe stellt immer die Gesamtzahl der Elemente dar, nicht die Anzahl der Bytes, die Sie im Arbeitsspeicher verbrauchen.The size always represents the total number of elements, not the number of bytes that they consume in memory.
SpeicherverbrauchMemory Consumption Es gibt keine verbindlichen Angaben darüber, wie ein Array gespeichert wird.It is not safe to make any assumptions regarding how an array is stored in memory. Der Speicherverbrauch variiert auf Plattformen mit unterschiedlichen Datenbreiten, d. h. ein und dasselbe Array kann auf einem 64-Bit-System mehr Speicherplatz benötigen als auf einem 32-Bit-System.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. Abhängig von der Systemkonfiguration beim Initialisieren eines Arrays kann die Common Language Runtime (CLR) Speicher so zuweisen, dass die Elemente auf sehr engem Raum gespeichert werden oder nur die natürlichen Hardwarebeschränkungen gelten.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. Ein Array benötigt außerdem zusätzlichen Speicher für seine Steuerungsinformationen. Der Bedarf an zusätzlichem Speicher nimmt mit jeder hinzugefügten Dimension zu.Also, an array requires a storage overhead for its control information, and this overhead increases with each added dimension.

Der Arraytyp.The array type

Jedes Array weist einen Datentyp auf, der vom Datentyp seiner Elemente abweicht.Every array has a data type, which differs from the data type of its elements. Es gibt keinen universellen Datentyp, der sich für alle Arrays eignet.There is no single data type for all arrays. Stattdessen wird der Datentyp eines Arrays durch die Anzahl der Dimensionen (den Rang) des Arrays bestimmt, sowie durch den Datentyp der Elemente im Array.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. Zwei Array Variablen weisen denselben Datentyp auf, wenn Sie denselben Rang aufweisen und deren Elemente denselben Datentyp aufweisen.Two array variables are of the same data type only when they have the same rank and their elements have the same data type. Die Längen der Dimensionen eines Arrays beeinflussen den Array Datentyp nicht.The lengths of the dimensions of an array do not influence the array data type.

Jedes Array erbt aus der System.Array-Klasse. Sie können eine Variable des Typs Array deklarieren, ein Array des Typs Array können Sie jedoch nicht erstellen.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. Der folgende Code deklariert z. b. die arr Variable als Typ Array und ruft die Array.CreateInstance-Methode auf, um das Array zu instanziieren. der Typ des Arrays erweist sich als 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[]

Die ReDim-Anweisung kann nicht für eine Variable verwendet werden, die mit dem Typ Array deklariert ist.Also, the ReDim Statement cannot operate on a variable declared as type Array. Aus diesen Gründen und aus Gründen der Typsicherheit empfiehlt es sich, jedes Array als bestimmten Typ zu deklarieren.For these reasons, and for type safety, it is advisable to declare every array as a specific type.

Sie können den Datentyp eines Arrays oder seiner Elemente auf verschiedene Arten ermitteln.You can find out the data type of either an array or its elements in several ways.

  • Sie können die GetType-Methode für die Variable zum Abrufen eines Type Objekts, das den Lauf Zeittyp der Variablen darstellt, abrufen.You can call the GetType method on the variable to get a Type object that represents the run-time type of the variable. Das Type -Objekt stellt in seinen Eigenschaften und Methoden umfassende Informationen bereit.The Type object holds extensive information in its properties and methods.
  • Sie können die Variable an die TypeName-Funktion übergeben, um eine String mit dem Namen des Lauf Zeit Typs zu erhalten.You can pass the variable to the TypeName function to get a String with the name of run-time type.

Im folgenden Beispiel werden sowohl die GetType-Methode als auch die TypeName-Funktion aufgerufen, um den Typ eines Arrays zu bestimmen.The following example calls the both the GetType method and the TypeName function to determine the type of an array. Der Arraytyp ist Byte(,).The array type is Byte(,). Beachten Sie, dass die Type.BaseType-Eigenschaft auch angibt, dass der Basistyp des Bytearrays die Array Klasse ist.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 als Rückgabewerte und ParameterArrays as return values and parameters

Damit eine Function-Prozedur ein Array zurückgibt, geben Sie den Arraydatentyp und die Anzahl der Dimensionen als Rückgabetyp für die Function-Anweisung an.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. Deklarieren Sie in der Funktion eine lokale Arrayvariable mit dem gleichen Datentyp und der gleichen Anzahl an Dimensionen.Within the function, declare a local array variable with same data type and number of dimensions. Schließen Sie die lokale Arrayvariable ohne Klammern in die Return-Anweisung ein.In the Return Statement, include the local array variable without parentheses.

Um ein Array als Parameter für eine Sub - oder Function -Prozedur anzugeben, definieren Sie den Parameter als Array mit einem bestimmten Datentyp und einer bestimmten Anzahl von Dimensionen.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. Übergeben Sie im aufzurufenden Vorgang eine Array Variable mit dem gleichen Datentyp und der gleichen Anzahl von Dimensionen.In the call to the procedure, pass an array variable with the same data type and number of dimensions.

Im folgenden Beispiel gibt die GetNumbers-Funktion ein Integer()zurück, ein eindimensionales Array vom Typ Integer.In the following example, the GetNumbers function returns an Integer(), a one-dimensional array of type Integer. Die Prozedur ShowNumbers akzeptiert ein Argument 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
    

Im folgenden Beispiel gibt die GetNumbersMultiDim-Funktion ein Integer(,)zurück, ein zweidimensionales Array vom Typ Integer.In the following example, the GetNumbersMultiDim function returns an Integer(,), a two-dimensional array of type Integer. Die Prozedur ShowNumbersMultiDim akzeptiert ein Argument 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

Verzweigte ArraysJagged arrays

In einigen Fällen ist die Datenstruktur in einer Anwendung zweidimensional, jedoch nicht rechteckig.Sometimes the data structure in your application is two-dimensional but not rectangular. Beispielsweise können Sie ein Array verwenden, um Daten über die Hochtemperatur der einzelnen Tage des Monats zu speichern.For example, you might use an array to store data about the high temperature of each day of the month. Die erste Dimension des Arrays stellt den Monat dar, die zweite Dimension stellt jedoch die Anzahl von Tagen dar, und die Anzahl von Tagen in einem Monat ist nicht einheitlich.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. Ein Jagged Array, das auch als Array von Arraysbezeichnet wird, ist für derartige Szenarios konzipiert.A jagged array, which is also called an array of arrays, is designed for such scenarios. Ein Jagged Array ist ein Array, dessen Elemente ebenfalls Arrays sind.A jagged array is an array whose elements are also arrays. Ein verzweigtes Array und jedes Element in einem verzweigten Array können über eine oder mehrere Dimensionen verfügen.A jagged array and each element in a jagged array can have one or more dimensions.

Im folgenden Beispiel wird ein Array von Monaten verwendet, wobei jedes Element ein Array von Tagen ist.The following example uses an array of months, each element of which is an array of days. Im Beispiel wird eine Jagged Array verwendet, da für verschiedene Monate eine unterschiedliche Anzahl von Tagen verwendet wird.The example uses a jagged array because different months have different numbers of days. Das Beispiel zeigt, wie Sie eine Jagged Array erstellen, Werte zuweisen und ihre Werte abrufen und anzeigen können.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

Im vorherigen Beispiel werden der Jagged Array auf Element Weise Werte mithilfe einer For...Next-Schleife zugewiesen.The previous example assigns values to the jagged array on an element-by-element basis by using a For...Next loop. Sie können auch den Elementen einer Jagged Array Werte zuweisen, indem Sie die in einem Array verwendeten Literale verwenden.You can also assign values to the elements of a jagged array by using nested array literals. Der Versuch der Verwendung von mit einem Array verknüpften Array Literalen (z. b. Dim valuesjagged = {{1, 2}, {2, 3, 4}}) generiert jedoch Compilerfehler BC30568.However, the attempt to use nested array literals (for example, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) generates compiler error BC30568. Um den Fehler zu beheben, schließen Sie die inneren Array Literale in Klammern ein.To correct the error, enclose the inner array literals in parentheses. Die Klammern erzwingen das Auswerten des Arrayliteralen Ausdrucks, und die resultierenden Werte werden mit dem äußeren Arrayliteralen verwendet, wie im folgenden Beispiel gezeigt.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

Ein Jagged Array ist ein eindimensionales Array, dessen Elemente Arrays enthalten.A jagged array is a one-dimensional array whose elements contain arrays. Daher geben die Array.Length-Eigenschaft und die Array.GetLength(0)-Methode die Anzahl der Elemente im eindimensionalen Array zurück, und Array.GetLength(1) löst eine IndexOutOfRangeException aus, da eine Jagged Array nicht mehrdimensional ist.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. Sie bestimmen die Anzahl der Elemente in jedem Unterarray, indem Sie den Wert der Array.Length-Eigenschaft jedes Unterarrays abrufen.You determine the number of elements in each subarray by retrieving the value of each subarray's Array.Length property. Im folgenden Beispiel wird veranschaulicht, wie die Anzahl der Elemente in einer Jagged Array bestimmt wird.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

Arrays der Länge 0 (null)Zero-length arrays

Visual Basic unterscheidet zwischen einem nicht initialisierten Array (einem Array, dessen Wert Nothingist) und einem Array der Länge 0 (null ) oder einem leeren Array (ein Array ohne Elemente). Ein nicht initialisiertes Array ist ein Array, das nicht dimensioniert wurde oder dem ein Wert zugewiesen wurde.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. Beispiel:For example:

Dim arr() As String

Ein Array der Länge 0 (null) wird mit der Dimension-1 deklariert.A zero-length array is declared with a dimension of -1. Beispiel:For example:

Dim arrZ(-1) As String

Unter den folgenden Bedingungen müssen Sie eventuell ein Array der Länge 0 (null) erstellen:You might need to create a zero-length array under the following circumstances:

  • Ohne das Risiko einer NullReferenceException Ausnahme muss Ihr Code auf Member der Array Klasse zugreifen, wie z. b. Length oder Rank, oder eine Visual Basic Funktion aufrufen, z. b. 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.

  • Sie möchten Ihren Code einfach halten, indem Sie nicht nach Nothing als Sonderfall suchen müssen.You want to keep your code simple by not having to check for Nothing as a special case.

  • Der Code interagiert mit einer API (Application Programming Interface), die entweder verlangt, dass mindestens einer Prozedur ein Array der Länge Null übergeben wird. Oder er interagiert mit einer API, die ein solches Array von mindestens einer Prozedur zurückgibt.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.

Aufteilen eines ArraysSplitting an array

In einigen Fällen müssen Sie möglicherweise ein einzelnes Array in mehrere Arrays aufteilen.In some cases, you may need to split a single array into multiple arrays. Dies umfasst die Identifizierung der Punkte oder Punkte, an denen das Array aufgeteilt werden soll, und das anschließende auslassen des Arrays in zwei oder mehr separate 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.

Hinweis

In diesem Abschnitt wird das Aufteilen einer einzelnen Zeichenfolge in ein Zeichen folgen Array auf der Grundlage eines Trenn Zeichens nicht erläutert.This section does not discuss splitting a single string into a string array based on some delimiter. Informationen zum Aufteilen einer Zeichenfolge finden Sie in der String.Split-Methode.For information on splitting a string, see the String.Split method.

Die gängigsten Kriterien für das Aufteilen eines Arrays lauten:The most common criteria for splitting an array are:

  • Die Anzahl der Elemente im Array.The number of elements in the array. Beispielsweise können Sie ein Array mit mehr als einer angegebenen Anzahl von Elementen in eine Anzahl von ungefähr gleichen Teilen aufteilen.For example, you might want to split an array of more than a specified number of elements into a number of approximately equal parts. Zu diesem Zweck können Sie den Wert verwenden, der entweder von der Array.Length oder Array.GetLength-Methode zurückgegeben wird.For this purpose, you can use the value returned by either the Array.Length or Array.GetLength method.

  • Der Wert eines Elements, das als Trennzeichen dient, das angibt, wo das Array aufgeteilt werden soll.The value of an element, which serves as a delimiter that indicates where the array should be split. Sie können nach einem bestimmten Wert suchen, indem Sie die Methoden Array.FindIndex und Array.FindLastIndex aufrufen.You can search for a specific value by calling the Array.FindIndex and Array.FindLastIndex methods.

Nachdem Sie den Index oder die Indizes festgelegt haben, an dem das Array aufgeteilt werden soll, können Sie die einzelnen Arrays erstellen, indem Sie die Array.Copy-Methode aufrufen.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.

Im folgenden Beispiel wird ein Array in zwei Arrays von ungefähr gleicher Größe aufgeteilt.The following example splits an array into two arrays of approximately equal size. (Wenn die Gesamtzahl der Array Elemente ungerade ist, verfügt das erste Array über ein Element, das größer als das zweite ist.)(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

Im folgenden Beispiel wird ein Zeichen folgen Array basierend auf dem vorhanden sein eines Elements, dessen Wert "zzz" ist, in zwei Arrays aufgeteilt, das als Array Trennzeichen fungiert.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. Die neuen Arrays enthalten kein-Element, das das Trennzeichen enthält.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

Beitreten zu ArraysJoining arrays

Sie können auch eine Reihe von Arrays in einem einzelnen größeren Array kombinieren.You can also combine a number of arrays into a single larger array. Zu diesem Zweck verwenden Sie auch die Array.Copy-Methode.To do this, you also use the Array.Copy method.

Hinweis

In diesem Abschnitt wird nicht erläutert, wie ein Zeichen folgen Array einer einzelnen Zeichenfolge hinzufügen wird.This section does not discuss joining a string array into a single string. Weitere Informationen zum beitreten zu einem Zeichen folgen Array finden Sie unter String.Join-Methode.For information on joining a string array, see the String.Join method.

Vor dem Kopieren der Elemente jedes Arrays in das neue Array müssen Sie zunächst sicherstellen, dass Sie das Array initialisiert haben, damit es groß genug ist, um das neue Array aufnehmen zu können.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. Dazu haben Sie zwei Möglichkeiten:You can do this in one of two ways:

  • Verwenden Sie die ReDim Preserve -Anweisung, um das Array dynamisch zu erweitern, bevor Sie neue Elemente hinzufügen.Use the ReDim Preserve statement to dynamically expand the array before adding new elements to it. Dies ist die einfachste Methode, kann jedoch zu Leistungseinbußen und übermäßig hohem Speicherverbrauch führen, wenn Sie große Arrays kopieren.This is the easiest technique, but it can result in performance degradation and excessive memory consumption when you are copying large arrays.
  • Berechnen Sie die Gesamtanzahl der Elemente, die für das neue große Array benötigt werden, und fügen Sie dann die Elemente der einzelnen Quell Arrays hinzu.Calculate the total number of elements needed for the new large array, then add the elements of each source array to it.

Im folgenden Beispiel wird der zweite Ansatz verwendet, um vier Arrays mit jeweils zehn Elementen zu einem einzelnen Array hinzuzufügen.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.

Da in diesem Fall die Quell Arrays klein sind, können wir das Array auch dynamisch erweitern, während wir die Elemente jedes neuen Arrays hinzufügen.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. In folgendem Beispiel wird dies getan.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.

Sammlungen als Alternative zu ArraysCollections as an alternative to arrays

Arrays eignen sich bestens zum Erstellen und Arbeiten mit einer festen Anzahl von Objekten mit starkem Typ.Arrays are most useful for creating and working with a fixed number of strongly typed objects. Auflistungen ermöglichen ein flexibleres Arbeiten mit Objektgruppen.Collections provide a more flexible way to work with groups of objects. Anders als bei Arrays, bei denen es erforderlich ist, dass Sie die Größe eines Arrays explizit mit der ReDim-Anweisungändern, werden Auflistungen dynamisch vergrößert und verkleinert, wenn sich die Anforderungen einer Anwendung ändern.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.

Wenn Sie ReDim verwenden, um ein Array neu zu formatieren, erstellt Visual Basic ein neues Array und gibt das vorherige frei.When you use ReDim to redimension an array, Visual Basic creates a new array and releases the previous one. Dies nimmt Ausführungszeit in Anspruch.This takes execution time. Wenn sich die Anzahl der Elemente, mit denen Sie arbeiten, häufig ändert oder Sie die maximale Anzahl von Elementen, die Sie benötigen, nicht vorhersagen können, erzielen Sie in der Regel eine bessere Leistung, indem Sie eine Sammlung verwenden.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.

Bei einigen Auflistungen können Sie jedem Objekt, das Sie in die Auflistung einfügen, einen Schlüssel zuweisen, sodass das Objekt anhand des Schlüssels schnell abgerufen werden kann.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.

Wenn die Auflistung Elemente eines Datentyps enthält, können Sie eine der Klassen im System.Collections.Generic -Namespace verwenden.If your collection contains elements of only one data type, you can use one of the classes in the System.Collections.Generic namespace. Eine generische Auflistung erzwingt Typsicherheit, sodass der Auflistung kein anderer Datentyp hinzugefügt werden kann.A generic collection enforces type safety so that no other data type can be added to it.

Weitere Informationen über Auflistungen finden Sie unter Auflistungen.For more information about collections, see Collections.

BegriffTerm DefinitionDefinition
Array Dimensions in Visual BasicArray Dimensions in Visual Basic Erläutert Rang und Dimensionen in Arrays.Explains rank and dimensions in arrays.
How to: Initialize an Array Variable in Visual Basic (Gewusst wie: Initialisieren einer Arrayvariable in Visual Basic)How to: Initialize an Array Variable in Visual Basic Beschreibt das Auffüllen von Arrays mit Anfangswerten.Describes how to populate arrays with initial values.
How to: Sort An Array in Visual Basic (Gewusst wie: Sortieren eines Arrays in Visual Basic)How to: Sort An Array in Visual Basic Erläutert, wie die Elemente eines Arrays alphabetisch sortiert werden.Shows how to sort the elements of an array alphabetically.
Gewusst wie: Zuweisen eines Arrays zu einem anderen ArrayHow to: Assign One Array to Another Array Beschreibt die Regeln und Schritte zum Zuweisen eines Arrays an eine andere Arrayvariable.Describes the rules and steps for assigning an array to another array variable.
Problembehandlung bei ArraysTroubleshooting Arrays Erörtert einige allgemeine Probleme, die beim Arbeiten mit Arrays auftreten.Discusses some common problems that arise when working with arrays.

Siehe auchSee also