Vous êtes sur la page 1sur 29

Todos los arrays tienen de forma invariable cero como primer ndice

El ndice del primer elemento de cualquier array que creemos en VB.NET ser cero, cuando declaremos un array del modo tradicional, la cantidad de elementos ser el nmero que indiquemos en la declaracin mas uno. Ejemplo En VB.NET el primer ndice siempre es 0
Public Sub Main() ' array de 3 elementos Dim sNombres(2) As String sNombres(0) = "Pedro" sNombres(1) = "Ana" sNombres(2) = "Jaime" End Sub

Arriba

Los rangos de ndices no estn permitidos.


Debido a que ahora el primer ndice siempre debe ser cero, el establecer un rango de ndices ha dejado de tener sentido y es una caracterstica que ha sido eliminada del lenguaje.
Arriba

Todos los arrays son de tamao variable.


En VB.NET todos los arrays son de tamao variable, tanto si se especifica como no un tamao al ser declarados. En este punto debemos matizar un aspecto: cada

vez que en VB.NET se cambia el tamao de un array, lo que hace .NET Framework internamente es destruir el array actual y crear un nuevo objeto de la clase Array con el nuevo tamao especificado, usando el mismo nombre de la variable correspondiente al array eliminado en primer lugar. Veremos posteriormente ejemplos de cambio de tamao en arrays.
Arriba

Declaracin

Adems de la declaracin habitual en la que especificamos el nmero de ndices al mismo tiempo que declaramos el array, podemos asignar tambin los valores para dichos elementos al mismo tiempo que lo declaramos, inicializar la lista de elementos sin asignar valor, etc. La norma comn en toda declaracin de arrays reside en que la variable a la que se va a asignar el array debe ir seguida de los signos de parntesis, indiquemos o no el nmero elementos. El siguiente cdigo fuente muestra algunos de los posibles casos. Declaracin de arrays en VB.NET
Public Sub Main() ' formas de declaracin de arrays ' =============================== ' 1) ' estableciendo el nmero de elementos Dim sNombres(2) As String ' 2) ' asignando valores al array al mismo tiempo que se declara, ' la lista de valores debe ir encerrada entre llaves

Dim sEstaciones() As String = {"Ana", "Pedro", "Luis"} ' 3) ' indicando el tipo de dato pero no el nmero de elementos, ' de este modo la variable todava no es considerada ' un array ya que contiene una referencia a Nothing Dim iValores() As Integer ' 4) ' indicando el tipo de dato y estableciendo una ' lista vaca de elementos, ' a diferencia del caso anterior, la variable ahora ' se considera un array aunque de longitud cero Dim iDatos() As Integer = {} ' 5) ' instanciando el tipo de dato, estableciendo el nmero ' de elementos al instanciar, y que se trata de un array ' al situar las llaves Dim iCantidades() As Integer = New Integer(20) {} End Sub

Arriba

Visualizar el contenido del array desde el depurador

Para ver el contenido de los arrays segn van siendo ejecutadas las lneas de cdigo que los declaran, utilizaremos la ventana Locales del depurador, que muestra las variables de mbito local al procedimiento que estamos ejecutando actualmente. Accederemos a esta ventana con el men Depurar + Ventanas +

Locales o la pulsacin [CTRL + ALT + V, L], que muestra el aspecto de la siguiente figura.

Ventana Locales de Visual Studio .NET

En esta ventana debemos hacer clic sobre el icono situado junto al nombre de la variable para expandir sus elementos, de modo que se mostrar cada uno de los valores. Con doble clic en la columna Valor podremos modificar el valor del elemento.
Arriba

Asignacin / obtencin de valores

Para asignar u obtener un valor a o desde un elemento de un array emplearemos la variable que contiene el array haciendo referencia al ndice a manipular, o puesto que un array es un objeto, utilizaremos los mtodos SetValue() y GetValue() que asignan y obtienen respectivamente valores de un array. Veamos un ejemplo. Asignacin / obtencin de valores en arrays
Public Sub Main() ' asignacin de valores a los elementos de un array ' =================================================

Dim sNombres(4) As String ' directamente sobre la variable ' haciendo referencia al ndice sNombres(0) = "Juan" sNombres(1) = "Ana" sNombres(2) = "Luis" ' o con el mtodo SetValue() sNombres.SetValue("Elena", 3) sNombres.SetValue("Miguel", 4) ' obtencin de valores de un array ' ================================ Dim sValorA As String Dim sValorB As String sValorA = Nombres(2) ' directamente de la variable ' usando el meth GetValue

sValorB = sNombres.GetValue(3)

Console.WriteLine("Contenido de las variables") Console.WriteLine("==========================") Console.WriteLine("ValorA: {0} -- ValorB: {1}", sValorA, sValorB) Console.ReadLine() End Sub

Arriba

Recorrer un array

Para realizar un recorrido por los elementos de un array seguimos disponiendo de las conocidas funciones LBound() y UBound(), que devuelven el nmero de ndice inferior y superior respectivamente del array que pasemos como parmetro.

No obstante, la orientacin a objetos proporcionada por VB.NET pone a nuestra disposicin un nuevo conjunto de caractersticas que comentamos seguidamente. La propiedad Length de un objeto array devuelve el nmero de elementos que tiene el array Los mtodos GetLowerBound() y GetUpperBound() devuelven el nmero de ndice inferior y superior de la dimensin del array. El resultado es el mismo que usando LBound() y UBound(), pero desde una perspectiva orientada a objetos, algo muy de agradecer, ya que todo en la plataforma est orientado a objetos. Enumeradores . Un objeto enumerador pertenece

al interfaz IEnumerator , diseado para realizar un recorrido o iteracin a travs de uno de los diferentes tipos de coleccin (arrays incluidos) existentes en .NET Framework. Mediante el mtodo GetEnumerator () de un objeto array, obtenemos un objeto IEnumerator que slo puede realizar labores de lectura sobre el array, en ningn caso de modificacin. Como muestra de estas funcionalidades, el cdigo fuente mostrado a continuacin contiene algunos ejemplos de cmo realizar actualmente una iteracin por los elementos de un array. Recorrer un array
Public Sub Main() ' recorrer un array ' ================= Dim sNombres() As String = {"Ana", "Luis", "Pablo"} Dim iContador As Integer ' modo tradicional Console.WriteLine("Recorrido del array con modo tradicional")

For iContador = LBound(Nombres) To UBound(Nombres) Console.WriteLine("Posicin: {0} - Valor: {1}", iContador, sNombres(iContador)) Next Console.WriteLine() ' usando la propiedad Length Console.WriteLine("Recorrido del array con propiedad Length") For iContador = 0 To (Nombres.Length - 1) Console.WriteLine("Posicin: {0} - Valor: {1}", iContador, sNombres(iContador)) Next Console.WriteLine() ' usando los mtodos GetLowerBound() y GetUpperBound() Console.WriteLine("Recorrido del array con mtodos" & _ "GetLowerBound() y GetUpperBound()") For iContador = sNombres.GetLowerBound(0) To sNombres.GetUpperBound(0) Console.WriteLine("Posicin: {0} - Valor: {1}", iContador, sNombres(iContador)) Next Console.WriteLine() ' recorrer con un enumerador Console.WriteLine("Recorrido del array con un enumerador")

Dim sLetras() As String = {"a", "b", "c", "d"} Dim oEnumerador As System.Collections.IEnumerator ' obtener el enumerador del array oEnumerador = sLetras.GetEnumerator() ' con un enumerador no es necesario posicionarse ' en el primer elemento ni calcular la cantidad ' de elementos del array, slo hemos de avanzar ' posiciones con MoveNext() y obtener el valor ' actual con Current While oEnumerador.MoveNext() Console.WriteLine("Valor actual: {0}", oEnumerador.Current) End While Console.ReadLine() End Sub

Arriba

Modificar el tamao de un array

En VB.NET disponemos de la instruccin ReDim para modificar la cantidad de elementos que contiene un array. ReDim crea un nuevo array, por lo que en el caso de ampliar el nmero de elementos, los valores que previamente existieran se pierden. Para evitar este inconveniente debemos emplear adems la palabra clave Preserve, que mantiene los valores que existieran en los elementos del array. Veamos algunos ejemplos en el cdigo fuente mostrado a continuacin. Modificando el tamao de arrays
Public Sub Main()

' creamos un array Dim sNombres(2) As String sNombres(0) = "Juan" sNombres(1) = "Pedro" sNombres(2) = "Elena" ' ampliamos el nmero de elementos ' pero perdemos el contenido previo ReDim sNombres(4) sNombres(3) = "Isabel" sNombres(4) = "Raquel" Console.WriteLine("Array sNombres") MostrarArray(sNombres) ' creamos otro array Dim MsasNombres(2) As String sMasNombres(0) = "Juan" sMasNombres(1) = "Pedro" ' ampliamos el array sin perder elementos ReDim Preserve sMasNombres(4) sMasNombres(2) = "Miguel" sMasNombres(3) = "Antonio" sMasNombres(4) = "Paco" Console.WriteLine("Array sMasNombres") MostrarArray(sMasNombres) ' reducimos el array, pero sin perder los ' primeros elementos ReDim Preserve sMasNombres(2) Console.WriteLine("Array sMasNombres reducido")

MostrarArray(sMasNombres) Console.ReadLine() End Sub Private Sub MostrarArray(ByVal sMiLista() As String) Dim iContador As Integer For iContador = 0 To sMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, sMiLista(iContador)) Next Console.WriteLine() End Sub

En

el

cdigo

anterior

hemos

aadido

el procedimiento

MostrarArray(), que nos facilita el trabajo a la hora de recorrer un array de tipo String. En los sucesivos ejemplos iremos aadiendo otros procedimientos similares, cuya utilidad ser la de visualizar en la consola el contenido de un array, ahorrndonos una parte importante en la escritura de cdigo.
Arriba

Nmero de elementos al declarar la clase Array

Los arrays en VB.NET o mejor dicho en .NET Framework (ya que este es un aspecto que abarca a cualquiera de los lenguajes soportados por la plataforma), disponen de su propia clase, Array, lo que sucede es que por norma general no es necesario instanciar directamente un objeto de esta clase y posteriormente especificar el tipo de dato que van a contener sus elementos, sera un tanto engorroso para el programador.

El entorno ha solucionado este particular de forma transparente al sufrido desarrollador (que bastante tiene ya como para complicarse innecesariamente la vida) del modo explicado en los anteriores ejemplos: en el proceso de declaracin de un array, al situar los parntesis junto a la variable, el CLR detecta que queremos crear un array y acta en consecuencia, instanciando un objeto de la clase Array y del tipo de dato especificado en la declaracin. Pese a todo este trabajo que realiza el entorno por nosotros, siempre puede existir el caso del programador que por alguna causa (necesidad o capricho) quiera instanciar directamente un objeto de la clase Array. Aqu nos topamos con un poderoso inconveniente: la clase Array no tiene un constructor accesible directamente por el programador, o lo que es lo mismo, un constructor pblico. Sin embargo esto no va a detenernos en nuestro camino, ya que a pesar de no disponer de un constructor pblico, la clase Array resuelve este inconveniente proporcionando el mtodo compartido CreateInstance(), que en efecto, como su propio nombre indica, crea una instancia de la clase. Este mtodo se proporciona para permitir la creacin de arrays utilizando la tcnica de enlace tardo o late binding CreateInstance() dispone de la siguiente cualidad que puede no ser apreciada a simple vista: al crear un array utilizando dicho mtodo, ese array tendr el nmero real de elementos que indiquemos en el segundo parmetro del mtodo. Veamos un ejemplo. Diferencias al crear un array de modo normal y con CreateInstance()
Public Sub Main() ' declarar un array del modo habitual: ' este array tiene cuatro elementos, ' desde el ndice 0 al 3

Dim sEstaciones(3) As String sEstaciones(0) = "Primavera" sEstaciones(1) = "Verano" sEstaciones(2) = "Otoo" sEstaciones(3) = "Invierno" Console.WriteLine("Array sEstaciones") MostrarArray(sEstaciones) ' crear un array instancindolo de la clase Array ' con el mtodo CreateInstance() Dim sColores As Array ' este array tendr tres elementos reales ' que van desde el ndice 0 hasta el 2 sColores = Array.CreateInstance(GetType(String), 3) sColores(0) = "Azul" sColores(1) = "Rojo" sColores(2) = "Verde" Console.WriteLine("Array sColores") MostrarArray(sColores) Console.ReadLine() End Sub Private Sub MostrarArray(ByVal sMiLista() As String) Dim iContador As Integer For iContador = 0 To sMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, sMiLista(iContador)) Next Console.WriteLine()

End Sub

Un par de observaciones del el cdigo fuente anterior: en primer lugar, el mtodo CreateInstance() es de mbito compartido (Shared), eso quiere decir que no es necesaria crear una instancia previa de la clase Array para poder usarlo; basta con escribir el nombre de la clase, un punto y el nombre del mtodo. En segundo lugar, el modo de indicar el tipo de datos usando este mtodo pasa por llamar a la funcin GetType(), pasando como parmetro el nombre del tipo de dato. Con este pequeo truco, podemos declarar los arrays en el modo que nos sintamos ms cmodos: clsico o al nuevo estilo de .NET.
Arriba

Paso de arrays como parmetros y devolucin desde funciones

De igual modo que hacemos con las variables normales, podemos pasar un array como parmetro a un procedimiento tanto de tipo Sub como Function . Existe no obstante, una diferencia cuando se trata de realizar un paso por valor o por referencia. Cuando pasamos un array a un procedimiento, ya sea por valor o por referencia, siempre se pasa el array por referencia, por lo tanto, cualquier cambio que hagamos sobre el array en el procedimiento de destino se reflejar al volver al procedimiento origen. Veamos el siguiente fuente de ejemplo. Paso de arrays como parmetro
Public Sub Main() Dim iValores() As Integer = {10, 20, 30} ' en ambos casos, se pasa una referencia del array ManipArrayVal(iValores) ManipArrayRef(iValores) ' al volver de las llamadas a los procedimientos

' el array ha sido modificado en ambas llamadas MostrarValoresArray(iValores) Console.ReadLine() End Sub '--------------------------Private Sub ManipArrayVal(ByVal iListaPorValor As Integer()) ' cambiar elemento del array iListaPorValor(0) = 888 End Sub '--------------------------Private Sub ManipArrayRef(ByRef iListaPorReferencia As Integer()) ' cambiar elemento del array iListaPorReferencia(2) = 457 End Sub '--------------------------Private Sub MostrarValoresArray(ByVal iMiLista() As Integer) Dim iContador As Integer For iContador = 0 To iMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", _ iContador, _ iMiLista(iContador)) Next Console.WriteLine() End Sub

Si queremos evitar que un array sea cambiado cuando lo pasamos como parmetro a un procedimiento, podemos usar el mtodo Clone() del objeto

array, que crea un nuevo array con los mismos valores que el original, pero que no guarda referencias con el original, tratndose de objetos array independientes, como vemos en el siguiente cdigo. Creacin de un nuevo array con el mtodo Clone()
Public Sub Main() Dim iValores() As Integer = {10, 20, 30} CambiaArray(iValores) Console.WriteLine("Array original") MostrarValoresArray(iValores) Console.ReadLine() End Sub Private Sub CambiaArray(ByVal iListaDatos As Integer()) ' crear un array clnico Dim iListaClonada As Array iListaClonada = iListaDatos.Clone() iListaClonada(0) = 621 iListaClonada(1) = 900 iListaClonada(2) = 567 Console.WriteLine("Array clnico") MostrarValoresArray(iListaClonada) End Sub Private Sub MostrarValoresArray(ByVal iMiLista() As Integer) Dim iContador As Integer For iContador = 0 To iMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, iMiLista(iContador))

Next Console.WriteLine() End Sub

En el caso anterior, al crear dentro del procedimiento CambiaArray() un nuevo array con Clone(), el array del procedimiento Main() no se ver afectado por los cambios.
Arriba

Copia de arrays

El modo ms sencillo de copiar un array consiste en asignar la variable del array origen a otra variable, con ello tendremos una copia del primer array. Debemos destacar que el resultado real de esta accin son dos variables que apuntan a la misma lista de valores, por lo que en definitiva slo tenemos un array, al cual podemos acceder usando dos variables. Otro sistema para copiar arrays consiste en el uso del mtodo CopyTo() del objeto array origen de la copia. El primer parmetro de este mtodo es el objeto array destino, mientras que el segundo parmetro es la posicin del array destino a partir de la cual se van a copiar todos los valores del array origen. Por ltimo tenemos el mtodo compartido Copy() de la clase Array. Es un mtodo sobrecargado, es decir, que en funcin de su lista de parmetros dispone de diferentes implementaciones, de las cuales, una de ellas permite copiar desde un array origen un nmero determinado de elementos hasta un array destino, especificando la posicin en la que se empezar la copia tanto en uno como en otro array. El fuente a continuacin ilustra las tcnicas de copia que acabamos de comentar.

Copia de arrays
Public Sub Main() Dim sColoresA(3) As String sColoresA(0) = "Azul" sColoresA(1) = "Verde" sColoresA(2) = "Rosa" sColoresA(3) = "Blanco" ' asignar el array a otra variable, ' esta ltima variable ser una copia ' del original... Dim sColoresB() As String sColoresB = sColoresA ' ...por lo que cualquier modificacin ' sobre el array sColoresB repercutir ' en el array sColoresA sColoresB(2) = "Granate" Console.WriteLine("Array sColoresA") MostrarArray(sColoresA) Console.WriteLine("Array sColoresB") MostrarArray(sColoresB) ' copiar usando el mtodo CopyTo() Dim sColorDestino(6) As String sColoresA.CopyTo(sColorDestino, 2) Console.WriteLine("Array sColorDestino") MostrarArray(sColorDestino) ' copiar usando el mtodo Copy() Dim sListaColores(5) As String

Array.Copy(sColoresA, 1, sListaColores, 2, 2) Console.WriteLine("Array sListaColores") MostrarArray(sListaColores) Console.ReadLine() End Sub '-----------------------------Private Sub MostrarArray(ByVal sMiLista() As String) Dim iContador As Integer For iContador = 0 To sMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, sMiLista(iContador)) Next Console.WriteLine() End Sub

Arriba

Limpiar valores

Con el termino limpiar valores en un array, nos referimos a la accin de inicializar elementos de un array a su valor por defecto. Por ejemplo, en el caso de cadenas de caracteres sera una cadena vaca; en valores numricos el cero; en el caso de objetos sera un valor nulo o Nothing, etc. Para estas labores la clase Array proporciona el mtodo

compartido Clear(), cuyo primer parmetro es el array a manejar, el segundo corresponde al ndice a partir del que comenzarn a inicializarse valores, y el tercer parmetro es el nmero de elementos a inicializar. El siguiente cdigo fuente muestra algunos ejemplos de este mtodo.

Limpiar valores en un array


Public Sub Main() ' ---------------------Dim iNumeros() As Integer = {100, 200, 300, 400, 500, 600} ' limpiar elementos en un array de tipo Integer, ' los elementos limpiados se ponen a 0 Array.Clear(iNumeros, 1, 2) Console.WriteLine("Array iNumeros") MostrarValoresArray(iNumeros) ' ---------------------Dim sLetras(2) As String sLetras(0) = "a" sLetras(1) = "b" sLetras(2) = "c" ' limpiar elementos en un array de tipo String, ' los elementos limpiados quedan como cadena vaca Array.Clear(sLetras, 0, 1) Console.WriteLine("Array sLetras") MostrarArray(sLetras) ' ---------------------Dim oVarios(6) As Object oVarios(0) = "Hola" oVarios(1) = 456 oVarios(2) = 1200 oVarios(3) = #12/25/2001# oVarios(4) = 900 oVarios(5) = True

oVarios(6) = "adelante" ' al ser este un array de tipo Object ' los elementos limpiados se establecen a Nothing Array.Clear(oVarios, 3, 2) Console.WriteLine("Array oVarios") MostrarArrayObj(oVarios) Console.ReadLine() End Sub '----------------------------Private Sub MostrarArray(ByVal sMiLista() As String) Dim iContador As Integer For iContador = 0 To sMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", _ iContador, sMiLista(iContador)) Next Console.WriteLine() End Sub '----------------------------Private Sub MostrarValoresArray(ByVal iMiLista() As Integer) Dim iContador As Integer For iContador = 0 To iMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, iMiLista(iContador)) Next Console.WriteLine() End Sub

'----------------------------Private Sub MostrarArrayObj(ByVal oMiLista() As Object) Dim iContador As Integer For iContador = 0 To oMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, oMiLista(iContador)) Next Console.WriteLine() End Sub

Arriba

Ordenacin

Para ordenar un array tenemos el mtodo Sort(), que dispone, al estar sobrecargado, de varias implementaciones. La ms bsica es aquella que ordena la totalidad del array; tambin podemos ordenar una porcin del mismo, indicando la posicin inicial y la cantidad de elementos a ordenar, etc. El mtodo Reverse() por otra parte, invierte la posicin de todos o parte de los elementos del array. Debe quedar claro que este mtodo no realiza un orden inverso de dichos elementos, simplemente cambia las posiciones. Veamos a continuacin un cdigo con algunos ejemplos de ambos mtodos. Ordenar arrays
Public Sub Main() ' ordenar todo el array Dim iNumeros() As Integer = {520, 1200, 230, 900, 780, 715}

Array.Sort(iNumeros) Console.WriteLine("Array iNumeros ordenado al completo") MostrarValoresArray(iNumeros) ' ordenar parte del array Dim iDatos() As Integer = {520, 1200, 230, 900, 780, 715} Array.Sort(iDatos, 2, 3) Console.WriteLine("Array iDatos ordenado parcialmente") MostrarValoresArray(iDatos) ' invertir valores dentro del array Dim sLetras() As String = {"z", "a", "m", "b", "i", "c"} Array.Reverse(sLetras, 1, 4) Console.WriteLine("Array sLetras con valores invertidos") MostrarArray(sLetras) Console.ReadLine() End Sub '----------------------------Private Sub MostrarArray(ByVal sMiLista() As String) Dim iContador As Integer For iContador = 0 To sMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, sMiLista(iContador)) Next Console.WriteLine() End Sub '----------------------------Private Sub MostrarValoresArray(ByVal iMiLista() As Integer) Dim iContador As Integer

For iContador = 0 To iMiLista.Length - 1 Console.WriteLine("Elemento: {0} - Valor: {1}", iContador, iMiLista(iContador)) Next Console.WriteLine() End Sub

Arriba

Bsqueda

Los mtodos IndexOf() y LastIndexOf() de la clase Array, nos permiten buscar un elemento en un array comenzando la bsqueda desde el principio o final respectivamente. Ambos disponen de diferentes implementaciones al estar sobrecargados, por lo que en el ejemplo mostrado a continuacin veremos alguna de sus formas de uso. Consulte la documentacin de VS.NET para obtener una lista completa de la sobrecarga sobre estos mtodos. Etiquetas vacas
Bsqueda de valores en arrays Public Sub Main() Dim sNombres() As String = {"Alberto", "Juan", "Ana", "Paco", "Miguel", "Ana"} Dim iPosicionBuscar As Integer ' buscar una cadena, se comienza desde ' el ndice 0 del array iPosicionBuscar = Array.IndexOf(sNombres, "Paco") '--> 3 ' buscar una cadena a partir del primer

' elemento del array iPosicionBuscar = Array.IndexOf(sNombres, "Ana", 3) '--> 5 ' si no existe el valor que se busca ' se devuelve -1 iPosicionBuscar = Array.IndexOf(sNombres, "Laura") '--> -1 ' buscar comenzando por la ltima posicin Dim iNumeros() As Integer Dim iUltPosicionBuscar As Integer iNumeros = New Integer() {10, 20, 30, 10, 50, 60, 10, 70, 80} iUltPosicionBuscar = Array.LastIndexOf(iNumeros, 10) '--> 6 End Sub

Arriba

Arrays multidimensionales

Los arrays que hemos estado manejando hasta el momento han sido todos de tipo unidimensional. Esto quiere decir que eran arrays compuestos por una nica lista de valores. .NET Framework nos provee tambin de la capacidad de crear arrays formados por ms de una lista de valores, o lo que es igual, arrays multidimensionales. Un array de este tipo, se caracteriza por estar compuesto de varias dimensiones o listas anidadas al estilo de filas y columnas. Por ejemplo, la siguiente declaracin: Declaracin de arrays multidimensionales
Dim iDatos(2, 4) As Integer

Creara un array multidimensional formado por tres filas y cinco columnas. En este caso, el nmero correspondiente a la primera dimensin denota las filas, mientras que el nmero de la segunda dimensin hace lo propio para las columnas. La siguiente imagen muestra una representacin grfica de este array.

Representacin grfica de un array multidimensional con dos dimensiones

En este caso, por cada elemento de la primera dimensin, tendramos que recorrer todos los elementos de la segunda. El modo de asignacin por lo tanto, para cada uno de los elementos quedara como muestra el siguiente cdigo. Asignacin de valores en array multidimensional
Public Sub Main() Dim sCosas(2, 4) As String sCosas(0, 0) = "Azul" sCosas(0, 1) = "Amarillo" sCosas(0, 2) = "Verde" sCosas(0, 3) = "Rojo" sCosas(0, 4) = "Naranja" sCosas(1, 0) = "Coche" sCosas(1, 1) = "Tren" sCosas(1, 2) = "Avin" sCosas(1, 3) = "Moto"

sCosas(1, 4) = "Bici" sCosas(2, 0) = "Miguel" sCosas(2, 1) = "Ana" sCosas(2, 2) = "Rosa" sCosas(2, 3) = "Laura" sCosas(2, 4) = "Pedro" End Sub

Para recorrer arrays multidimensionales, la clase Array dispone de una serie de propiedades y mtodos que flexibilizan enormemente la manipulacin de este tipo de arrays. Hagamos un repaso de alguno de estos elementos. Rank . Devuelve el nmero de dimensiones del array. GetLength(nDimension). Devuelve el nmero de elementos del nmero de dimensin pasado como parmetro. GetLowerBound(nDimension). Devuelve el nmero de ndice inferior de la dimensin pasada como parmetro. GetUpperBound(nDimension). Devuelve el nmero de ndice superior de la dimensin pasada como parmetro. Vamos a completar el anterior cdigo fuente, aadiendo las lneas necesarias para recorrer el array multidimensional y visualizarlo en la consola al estilo de filas y columnas. Recorrer un array multidimensional
Public Sub Main() ' crear array multidimensional ' y rellenar con valores

Dim sCosas(2, 4) As String sCosas(0, 0) = "Azul" sCosas(0, 1) = "Blanco" sCosas(0, 2) = "Verde" sCosas(0, 3) = "Rojo" sCosas(0, 4) = "Naranja" sCosas(1, 0) = "Coche" sCosas(1, 1) = "Tren" sCosas(1, 2) = "Avin" sCosas(1, 3) = "Moto" sCosas(1, 4) = "Bici" sCosas(2, 0) = "Miguel" sCosas(2, 1) = "Ana" sCosas(2, 2) = "Rosa" sCosas(2, 3) = "Laura" sCosas(2, 4) = "Pedro" Dim iContadorDimUno As Integer Dim iContadorDimDos As Integer Dim sTextoFila As String ' poner ttulos de la fila y columnas que se estn procesando Console.WriteLine("Fila" & ControlChars.Tab & _ "Col 0" & ControlChars.Tab & "Col 1" & ControlChars.Tab & _ "Col 2" & ControlChars.Tab & "Col 3" & ControlChars.Tab & "Col 4") ' el bucle externo recorre la primera dimensin

For iContadorDimUno = sCosas.GetLowerBound(0) To sCosas.GetUpperBound(0) ' aqu obtenemos el nmero de fila ' que se est procesando sTextoFila = iContadorDimUno & ControlChars.Tab ' este bucle recorre la segunda dimensin For iContadorDimDos = sCosas.GetLowerBound(1) To sCosas.GetUpperBound(1) sTextoFila = sTextoFila & sCosas(iContadorDimUno, iContadorDimDos) & _ ControlChars.Tab Next ' mostrar en la consola el contenido Console.WriteLine(sTextoFila) sTextoFila = "" Next Console.WriteLine() Console.WriteLine("El nmero de dimensiones es: {0}", sCosas.Rank) Console.WriteLine("El nmero total de elementos es: {0}", sCosas.Length) Console.ReadLine() End Sub

Observe el lector, que para cada dimensin creamos un bucle cada vez a un nivel ms de profundidad, que ir recorriendo las respectivas dimensiones en el correcto orden. Por otro lado y como novedad, para tener acceso a las constantes de

caracteres, en VB.NET disponemos de la clase pblica ControlChars , que facilita el acceso a los cdigos de caracteres especiales.

Vous aimerez peut-être aussi