Zoeken…


Opmerkingen

Dim myArray(2) As Integer

someFunc(myArray)

Een array is een geïndexeerde verzameling objecten. Het type object wordt bepaald door het type dat wordt gegeven in de arraydeclaratie.

Arrays in Visual Basic .NET zijn meestal (en standaard) op nul (0) gebaseerd, wat betekent dat de eerste index 0 is. Een array van 10 elementen heeft een indexbereik van 0-9. Bij toegang tot matrixelementen is de maximaal toegankelijke index één minder dan het totale aantal elementen. Daarom moeten lussen die toegang hebben tot matrixindices altijd een bereikcontrole uitvoeren waarbij de waarde kleiner is dan de lengte van de matrix.

Matrixdefinitie

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

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

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

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

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

Zero-Based

Alle arrays in VB.NET zijn op nul gebaseerd. Met andere woorden, de index van het eerste item (de ondergrens) in een VB.NET-array is altijd 0 . Oudere versies van VB, zoals VB6 en VBA, waren standaard op één gebaseerd, maar ze boden een manier om de standaardgrenzen te overschrijven. In die eerdere versies van VB konden de onder- en bovengrenzen expliciet worden vermeld (bijvoorbeeld Dim array(5 To 10) . In VB.NET werd die flexibiliteit verwijderd om de compatibiliteit met andere .NET-talen te behouden en de ondergrens van 0 wordt nu altijd afgedwongen, maar de syntaxis To kan nog steeds worden gebruikt in VB.NET, waardoor het bereik mogelijk explicieter wordt. De volgende voorbeelden zijn bijvoorbeeld allemaal gelijkwaardig aan de hierboven genoemde voorbeelden:

Dim array(0 To 9) As Integer

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

ReDim Preserve array(0 To 10)

ReDim array(0 To 10)

Geneste matrixverklaringen

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

Declareer een matrix met één dimensie en stel matrixelementwaarden in

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

of

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

Initialisatie van de array

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

Multidimensionale initialisatie van de array

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

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

Jagged Array-initialisatie

Let op de haakjes om onderscheid te maken tussen een gekartelde array en een multidimensionale array. Subarrays kunnen een verschillende lengte hebben

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

Null-arrayvariabelen

Omdat arrays referentietypes zijn, kan een arrayvariabele null zijn. Om een null-arrayvariabele te declareren, moet u deze zonder grootte declareren:

Dim array() As Integer

Of

Dim array As Integer()

Als u wilt controleren of een array nul is, test u of deze Is Nothing :

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

Om een bestaande matrixvariabele op nul in te stellen, stelt u deze eenvoudig in op Nothing :

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

Of gebruik Erase , wat hetzelfde doet:

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

Verwijzen naar dezelfde array uit twee variabelen

Omdat arrays referentietypes zijn, is het mogelijk om meerdere variabelen naar hetzelfde arrayobject te hebben.

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

Niet-nul ondergrenzen

Met Option Strict On , hoewel het .NET Framework het mogelijk maakt om arrays met één dimensie te maken met niet-nul ondergrenzen, zijn ze geen "vectoren" en dus niet compatibel met VB.NET getypte arrays. Dit betekent dat ze alleen als Array kunnen worden gezien en dus geen normale matrixreferenties (index) kunnen gebruiken.

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

Naast het gebruik van Option Strict Off , kunt u de (index) syntaxis terugkrijgen door de array als een IList , maar dan is het geen array, dus u kunt LBound en UBound niet gebruiken op die variabelenaam (en u ' probeer boksen nog steeds niet te vermijden):

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

Multidimensionale niet-nul ondergrens arrays zijn compatibel met VB.NET multidimensionale getypte arrays:

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

MSDN-referentie: Array.CreateInstance



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow