Professional Documents
Culture Documents
MatricesenVisualBasic
Para ver el artculo en ingls, active la casilla Ingls.Tambin puede ver el texto en ingls en una ventana emergente si
pasa el puntero del mouse por el texto.
Una matriz es un conjunto de valores que estn relacionados de forma lgica entre s, como, por ejemplo, el nmero de
alumnos de cada curso en una escuela primaria. Si necesita ayuda sobre las matrices en Visual Basic para Aplicaciones
VBA, vea la referencia del lenguaje.
Con las matrices, puede hacer hacer referencia a estos valores relacionados con el mismo nombre y usar un nmero
denominado ndice o subndice para distinguirlos. Los valores individuales se denominan elementos de la matriz. Son
contiguos desde el ndice 0 hasta el valor de ndice ms alto.
A diferencia de una matriz, una variable que contiene un solo valor se denomina variable escalar.
Veamos algunos ejemplos rpidos antes de la explicacin:
VB
'Declareasingledimensionarrayof5valuesDimnumbers(4)AsIntegerDeclarea
singledimensionarrayandsetarrayelementvaluesDimnumbers=NewInteger(){1,2,4,
8}RedefinethesizeofanexistingarrayretainingthecurrentvaluesReDimPreserve
numbers(15)Redefinethesizeofanexistingarray,resettingthevaluesReDim
numbers(15)DeclareamultidimensionalarrayDimmatrix(5,5)AsDoubleDeclarea
multidimensionalarrayandsetarrayelementvaluesDimmatrix=NewInteger(4,4){{1,
2},{3,4},{5,6},{7,8}}DeclareajaggedarrayDimsales()()AsDouble=New
Double(11)(){}
En este tema
Elementos de una matriz en una matriz sencilla
Creacin de una matriz
Almacenamiento de valores en una matriz
Llenado de una matriz con valores iniciales
Literales de matriz anidados
Recorrer en iteracin una matriz
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
1/13
22/5/2016
MatricesenVisualBasic
2/13
22/5/2016
MatricesenVisualBasic
MsgBox("Studentsinkindergarten="&CStr(kindergarten))
MsgBox("Studentsinfirstgrade="&CStr(firstGrade))
MsgBox("Studentsinsixthgrade="&CStr(sixthGrade))
Puede hacer referencia a la matriz como un conjunto usando simplemente el nombre variable de la matriz sin ndices.
La matriz students del ejemplo anterior usa un ndice y es unidimensional. Una matriz que usa ms de un ndice o
subndice se denomina multidimensional. Para ms informacin, vea el resto de este tema y Dimensiones de matrices
en Visual Basic.
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
3/13
22/5/2016
MatricesenVisualBasic
4/13
22/5/2016
MatricesenVisualBasic
la matriz se pueden ampliar. Si no se puede determinar este tipo nico, el tipo dominante es el tipo nico al que
todos los dems tipos de la matriz se pueden restringir. Si no se puede determinar ninguno de estos tipos nicos, el
tipo dominante es Object. Por ejemplo, si la lista de valores que se proporciona al literal de matriz contiene valores de
tipo Integer, Long y Double, la matriz resultante es de tipo Double. Tanto Integer como Long se amplan solo a
Double. Por lo tanto, Double es el tipo dominante. Para obtener ms informacin, consulta Conversiones de
ampliacin y de restriccin Visual Basic. Estas reglas de inferencia se aplican a tipos que se deducen para matrices
que son variables locales definidas en un miembro de clase. Aunque puede usar literales de matriz al crear variables
de nivel de clase, no se puede usar la inferencia de tipos en el nivel de clase. Como resultado, los literales de matriz
que se especifican en el nivel de clase deducen los valores proporcionados para el literal de matriz como tipo Object.
Puede especificar de manera explcita el tipo de los elementos de una matriz que se crea usando un literal de matriz.
En este caso, los valores del literal de matriz se deben ampliar al tipo de los elementos de la matriz. En el ejemplo de
cdigo siguiente se crea una matriz de tipo Double desde una lista de enteros.
VB
DimvaluesAsDouble()={1,2,3,4,5,6}
Nota
Para evitar que se produzca un error al proporcionar literales de matriz anidados de distintas dimensiones,
incluya los literales de matriz internos entre parntesis. Los parntesis fuerzan la evaluacin de la expresin de
literal de matriz y los valores resultantes se usan con el literal de matriz externo, tal como muestra el cdigo
siguiente.
VB
Dimvalues={({1,2}),({3,4,5})}
Es posible usar la inferencia de tipos al crear una matriz multidimensional con literales de matriz anidados. Cuando
se usa la inferencia de tipos, el tipo inferido es el tipo dominante para todos los valores de todos los literales de
matriz de un nivel de anidamiento. En el ejemplo de cdigo siguiente se crea una matriz bidimensional del tipo
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
5/13
22/5/2016
MatricesenVisualBasic
6/13
22/5/2016
MatricesenVisualBasic
'56
El ejemplo siguiente recorre en iteracin una matriz unidimensional mediante el uso de Instruccin For Each...Next
Visual Basic.
VB
Dimnumbers={10,20,30}
ForEachnumberInnumbers
Debug.WriteLine(number)
Next
'Output:
'10
'20
'30
El ejemplo siguiente recorre en iteracin una matriz multidimensional mediante el uso de una instruccin For
Each...Next. Sin embargo, tiene ms control sobre los elementos de una matriz multidimensional si usa una
instruccin ForNext anidada, como en un ejemplo anterior, en lugar de una instruccin For EachNext.
VB
Dimnumbers={{1,2},{3,4},{5,6}}
ForEachnumberInnumbers
Debug.WriteLine(number)
Next
'Output:
'1
'2
'3
'4
'5
'6
7/13
22/5/2016
MatricesenVisualBasic
8/13
22/5/2016
MatricesenVisualBasic
'56
Matrices escalonadas
Una matriz que contiene otras matrices como elementos se conoce como matriz de matrices o matriz escalonada. Una
matriz escalonada y cada elemento de una matriz escalonada pueden tener una o ms dimensiones. A veces la
estructura de datos de la aplicacin es bidimensional pero no rectangular.
El ejemplo siguiente tiene una matriz de meses, siendo cada elemento una matriz de das. Puesto que los distintos
meses tienen un nmero diferente de das, los elementos no forman una matriz bidimensional rectangular. Por lo
tanto, se usa una matriz escalonada en lugar de una matriz multidimensional.
VB
'Declarethejaggedarray.
'TheNewclausesetsthearrayvariabletoa12element
'array.EachelementisanarrayofDoubleelements.
Dimsales()()AsDouble=NewDouble(11)(){}
'SeteachelementofthesalesarraytoaDouble
'arrayoftheappropriatesize.
FormonthAsInteger=0To11
DimdaysAsInteger=
DateTime.DaysInMonth(Year(Now),month+1)
sales(month)=NewDouble(days1){}
Nextmonth
'Storevaluesineachelement.
FormonthAsInteger=0To11
Dimupper=sales(month).GetUpperBound(0)
Forday=0Toupper
sales(month)(day)=(month*100)+day
Next
Next
9/13
22/5/2016
MatricesenVisualBasic
Sin arriesgarse a una excepcin NullReferenceException, el cdigo debe tener acceso a los miembros de la
clase Array, como, por ejemplo, Length o Rank, o bien deben llamar a una funcin Visual Basic como, por
ejemplo, UBound.
Desea que el cdigo usado sea ms sencillo al no tener que comprobar Nothing como caso especial.
El cdigo interacta con una interfaz de programacin de aplicaciones API que requiere pasar una matriz de
longitud cero a uno o ms procedimientos o que devuelve una matriz de longitud cero desde uno o ms
procedimientos.
Tamao de la matriz
El tamao de una matriz es el producto de las longitudes de todas sus dimensiones. Representa el nmero total de
elementos contenidos actualmente en la matriz.
En el ejemplo siguiente se declara una matriz tridimensional.
Dimprices(3,4,5)AsLong
El tamao total de la matriz en la variable prices es (3 + 1) x (4 + 1) x (5 + 1) = 120.
Puede encontrar el tamao de una matriz mediante la propiedad Length. Puede averiguar la longitud de cada
dimensin de una matriz multidimensional utilizando el mtodo GetLength.
Puede cambiar el tamao de una variable de matriz asignando un nuevo objeto de matriz o usando la instruccin
ReDim.
Hay varios aspectos que se deben tener en cuenta cuando se trabaja con el tamao de una matriz.
Longitud
de la
dimensin
El ndice de cada dimensin es de base 0, lo que significa que va desde 0 hasta su lmite mximo. Por
lo tanto, la longitud de una dimensin determinada supera en 1 el lmite mximo declarado para esa
dimensin.
Lmites de
longitud
La longitud de cada dimensin de una matriz se limita al valor mximo del tipo de datos Integer, que
es (2 ^ 31) 1. Sin embargo, el tamao total de una matriz tambin est limitado por la memoria
disponible en el sistema. Si se intenta inicializar una matriz que supera la cantidad de memoria RAM
disponible, Common Language Runtime produce una excepcin OutOfMemoryException.
Tamao y
tamao
de
elemento
El tamao de la matriz es independiente del tipo de datos de sus elementos. El tamao siempre
representa el nmero total de elementos, no el nmero de bytes que se usan en el almacenamiento.
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
10/13
22/5/2016
MatricesenVisualBasic
Consumo
de
memoria
No es seguro dar nada por supuesto en lo que respecta al modo de almacenar una matriz en la
memoria. El almacenamiento vara en funcin de las plataformas de diferentes anchos de datos, por
lo que la misma matriz puede utilizar ms memoria en un sistema de 64 bits que en un sistema de 32
bits. Segn la configuracin del sistema cuando inicializa una matriz, Common Language Runtime
CLR puede asignar el almacenamiento para empaquetar los elementos tan juntos como sea posible
o para alinearlos todos en los lmites naturales del hardware. Asimismo, una matriz requiere una
sobrecarga de almacenamiento para obtener su informacin de control y esta sobrecarga aumenta
con cada dimensin agregada.
11/13
22/5/2016
MatricesenVisualBasic
proporcionan una manera ms flexible de trabajar con grupos de objetos. A diferencia de las matrices, el grupo de
objetos con el que trabaja puede aumentar y reducirse de manera dinmica a medida que cambian las necesidades de
la aplicacin.
Si necesita cambiar el tamao de una matriz, debe usar la Instruccin ReDim Visual Basic. Al hacerlo, Visual Basic crea
una nueva matriz y libera la matriz anterior para su eliminacin. Esto requiere tiempo de ejecucin. Por lo tanto, si el
nmero de elementos con los que trabaja cambia con frecuencia o si no puede predecir el nmero mximo de
elementos que necesita, puede obtener un mejor rendimiento si usa una coleccin.
Para algunas colecciones, puede asignar una clave a cualquier objeto que incluya en la coleccin para, de este modo,
recuperar rpidamente el objeto con la clave.
Si la coleccin contiene elementos de un solo tipo de datos, puede usar una de las clases del espacio de nombres
System.Collections.Generic. Una coleccin genrica cumple la seguridad de tipos para que ningn otro tipo de datos
se pueda agregar a ella. Cuando recupera un elemento de una coleccin genrica, no tiene que determinar su tipo de
datos ni convertirlo.
Para ms informacin sobre las colecciones de elementos, vea Colecciones C# y Visual Basic.
Ejemplo
En el ejemplo siguiente se usa la clase genrica .NET FrameworkSystem.Collections.Generic.ListOfT para crear una
coleccin de listas de objetos Customer.
VB
'Definetheclassforacustomer.
PublicClassCustomer
PublicPropertyNameAsString
'Insertcodeforothermembersofcustomerstructure.
EndClass
'Createamodulelevelcollectionthatcanhold200elements.
PublicCustomerListAsNewList(OfCustomer)(200)
'Addaspecifiedcustomertothecollection.
PrivateSubAddNewCustomer(ByValnewCustAsCustomer)
'InsertcodetoperformvaliditycheckonnewCust.
CustomerList.Add(newCust)
EndSub
'DisplaythelistofcustomersintheDebugwindow.
PrivateSubPrintCustomers()
ForEachcustAsCustomerInCustomerList
Debug.WriteLine(cust)
Nextcust
EndSub
La declaracin de la coleccin CustomerFile especifica que solo puede contener elementos del tipo Customer.
Tambin proporciona una capacidad inicial de 200 elementos. El procedimiento AddNewCustomer comprueba la
validez del nuevo elemento y, a continuacin, lo agrega a la coleccin. El procedimiento PrintCustomers usa un
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
12/13
22/5/2016
MatricesenVisualBasic
Temas relacionados
Trmino
Definicin
Describe las reglas y los pasos para asignar una matriz a otra
variable de matriz.
Vea tambin
Array
Instruccin Dim Visual Basic
Instruccin ReDim Visual Basic
2016 Microsoft
https://msdn.microsoft.com/eses/library/wak0wfyt(d=printer).aspx
13/13