Buscar..


Observaciones

Dim myArray(2) As Integer

someFunc(myArray)

Una matriz es una colección de objetos ordenada por índice. El tipo de objeto se define por el tipo dado en la declaración de matriz.

Las matrices en Visual Basic .NET suelen estar basadas en cero (0), lo que significa que el primer índice es 0. Una matriz de 10 elementos tendrá un rango de índice de 0-9. Al acceder a los elementos de la matriz, el índice máximo accesible es uno menos que el número total de elementos. Debido a esto, los bucles que acceden a los índices de matriz de forma incremental siempre deben hacer una verificación de rango donde el valor es menor que la longitud de la matriz.

Definición de matriz

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).

De base cero

Todas las matrices en VB.NET están basadas en cero. En otras palabras, el índice del primer elemento (el límite inferior) en una matriz VB.NET siempre es 0 . Las versiones anteriores de VB, como VB6 y VBA, se basaban en una sola de forma predeterminada, pero proporcionaban una forma de anular los límites predeterminados. En esas versiones anteriores de VB, los límites inferior y superior podrían establecerse explícitamente (por ejemplo, Dim array(5 To 10) . En VB.NET, para mantener la compatibilidad con otros lenguajes .NET, se eliminó esa flexibilidad y el límite inferior de 0 ahora siempre se aplica. Sin embargo, la sintaxis de To aún se puede usar en VB.NET, lo que puede aclarar el rango de manera explícita. Por ejemplo, los siguientes ejemplos son todos equivalentes a los enumerados anteriormente:

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)

Declaraciones de matriz anidadas

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

Declarar una matriz de dimensión única y establecer valores de elementos de matriz

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

o

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

Inicialización de matriz

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.

Inicialización de matriz multidimensional

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

Inicialización de matriz irregular

Tenga en cuenta el paréntesis para distinguir entre una matriz dentada y una matriz multidimensional Las subarreglas pueden tener una longitud diferente

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

Variables de matriz nula

Dado que las matrices son tipos de referencia, una variable de matriz puede ser nula. Para declarar una variable de matriz nula, debe declararla sin un tamaño:

Dim array() As Integer

O

Dim array As Integer()

Para verificar si una matriz es nula, compruebe si no Is Nothing :

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

Para establecer una variable de matriz existente en nulo, simplemente configúrela en Nothing :

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

O usa Erase , que hace lo mismo:

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

Haciendo referencia a la misma matriz de dos variables

Dado que las matrices son tipos de referencia, es posible tener varias variables que apuntan al mismo objeto de matriz.

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

Límites inferiores distintos de cero.

Con Option Strict On , aunque .NET Framework permite la creación de matrices de una sola dimensión con límites inferiores a cero, no son "vectores" y, por lo tanto, no son compatibles con las matrices de tipo VB.NET. Esto significa que solo se pueden ver como Array y, por lo tanto, no se pueden usar referencias de array (index) normales.

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

Además de usar Option Strict Off , puede recuperar la sintaxis (index) al tratar la matriz como un IList , pero luego no es una matriz, por lo que no puede usar LBound y UBound en ese nombre de variable (y todavía no evito el boxeo):

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

Las matrices de límites inferiores no nulos multidimensionales son compatibles con las matrices de tipos multidimensionales VB.NET:

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

Referencia de MSDN: Array.CreateInstance



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow