You are on page 1of 17

Manejo de

Colecciones
Arreglos, ArrayList,
HashTable y
SortedList
Recorrido de un ArrayList con el
IEnumerator
Recorrido de un HashTable con el
IDictionaryEnumerator
Programacin Windows
Prof. Carlos David Castilla Quiroz
Correo: davidcastillaq@hotmail.com
Arreglos
Arrays
Una de las formas en las que podemos agrupar varios datos es mediante los arrays o
matrices!"
Usando un array# podemos acceder a cualquiera de los valores que tenemos almacenado
mediante un $ndice num%rico" &or e'emplo# si tenemos la variable discografa y
queremos acceder al tercer disco# podr$amos hacerlo de la siguiente forma(
discografa(3)"
)abiendo esto# podemos comprobar que ser$a f*cil recorrer el contenido de los arrays
mediante un bucle +or"
Qu tipos de datos se pueden usar para crear arrays?
Los tipos de datos de las variables usadas como array# pueden ser de cualquier tipo#
dependiendo de lo que queramos guardar" &or e'emplo# si queremos guardar los
nombres de los discos que tenemos# podemos usar un array del tipo )tring
Declarar Variables Como Arrays
&ara poder indicarle al ,- que nuestra intenci.n es crear un array podemos hacerlo de
dos formas distintas# para este e'emplo crearemos un array de tipo Integer(
/0 La cl*sica la usada en versiones anteriores!
Dim a! As Integer
10 La nueva forma introducida en "2ET(
Dim a As Integer!
eser!ar "emoria #ara $n Array
&ara poder hacerlo tenemos que usar la instrucci.n ReDim(
ReDim a3!
Al e'ecutarse este c.digo# tendremos un array con capacidad para 4 elementos"
5 son seis y no cinco# como por l.gica habr$a que esperar!# porque en "2ET
Prof. Carlos David Castilla !iro" Pgina 2
Programacin Windows
+rame6or7 el $ndice menor de un array siempre es cero y en ,isual -asic# el $ndice
superior es el indicado entre par%ntesis" &or tanto el array a tendr* reservada memoria
para 4 valores de tipo Integer# los $ndices ser$an desde 8 hasta 3 ambos inclusive"
Adem*s de usar ReDim# que realmente sirve para 9redimensionar9 el contenido de un
array# es decir# para volver a dimensionarlo o cambiarlo por un nuevo valor" )i sabemos
con antelaci.n el tama:o que contendr* el array# podemos hacerlo de esta forma(
Dim a3! As Integer
;on este c.digo estar$amos declarando la variable a como un array de 4 elementos de 8
a 3! del tipo Integer"
;uando indicamos la cantidad de elementos que contendr* el array no podemos usar la
segunda forma de declaraci.n que te mostr% anteriormente( Dim a As Integer3! ya que
esto producir$a un error sint*ctico"
Asignar Valores A $n Array
&ara asignar un valor a un elemento de un array# se hace de la misma forma que con las
variables normales# pero indicando el $ndice o posici.n! en el que guardar* el valor"
&or e'emplo# para almacenar el valor /3 en la posici.n < del array a# har$amos lo
siguiente(
a<! = /3
Acceder A $n %lemento De $n Array
De igual forma# si queremos utili>ar ese elemento que est* en la posici.n < para una
operaci.n# podemos hacerlo como con el resto de las variables# pero siempre usando el
par%ntesis y el n?mero de elemento al que queremos acceder(
i = b @ a<!
&os &mites De &os 'ndices De $n Array
;omo ya he comentado antes# el $ndice inferior de un array# siempre es cero# esto es
invariable# todos los arrays de "2ET +rame6or7 empie>an a contar por cero"
&ero el $ndice superior puede ser el que nosotros queramos# aunque sin pasarnos# que la
memoria disponible se puede agotar si pretendemos usar un valor eAageradamente alto"
Realmente el $ndice superior de un array es 1B4C 0/ el valor m*Aimo de un tipo Long!
(niciali)ar $n Array Al Declararla
Prof. Carlos David Castilla !iro" Pgina 3
Programacin Windows
Al igual que las variables normales se pueden declarar y al mismo tiempo asignarle un
valor inicial# con los arrays tambi%n podemos hacerlo# pero de una forma diferente# ya
que no es lo mismo asignar un valor que varios"
Aunque hay que tener presente que si iniciali>amos un array al declararla# no podemos
indicar el n?mero de elementos que tendr*# ya que el n?mero de elementos estar*
supeditado a los valores asignados"
&ara iniciali>ar un array debemos declarar ese array sin indicar el n?mero de elementos
que contendr*# seguida de un signo igual y a continuaci.n los valores encerrados en
llaves" ,eamos un e'emplo(
Dim a() As Integer = {1, 42, 15, 90, 2}
Tambi%n podemos hacerlo de esta otra forma(
Dim a As Integer() = {1, 42, 15, 90, 2}
Usando cualquiera de estas dos formas mostradas# el n?mero de elementos ser* 3# por
tanto los $ndices ir*n desde 8 hasta C"
&os Arrays #ueden *er De Cual+uier ,ipo
En todos estos e'emplos estamos usando valores de tipo Integer# pero podr$amos hacer
lo mismo si fuesen de tipo )tring o cualquier otro"
En el caso de que sean datos de tipo )tring# los valores a asignar deber*n estar entre
comillas dobles o ser variables de tipo )tring" &or e'emplo(
Dim s As )tring! = D9Hola9# 9Eundo# 9# 9te9# 9saludo9F
Cambiar %l ,ama-o De $n Array . "antener &os %lementos Que ,u!iera/
&ara poder conseguirlo# debemos usar ReDim seguida de la palabra clave &reserve# por
tanto si tenemos la siguiente declaraci.n(
Dim a! As Integer = D/# 1# <# C# 3F
5 queremos que en lugar de 3 elementos de 8 a C! tenga# por e'emplo /8 y no perder
los otros valores# usaremos la siguiente instrucci.n(
ReDim &reserve a/8!
A partir de ese momento# el array tendr* // elementos de 8 a /8!# los 3 primeros con
los valores que antes ten$a y los nuevos elementos tendr*n un valor cero# que es el valor
por defecto de los valores num%ricos"
Prof. Carlos David Castilla !iro" Pgina 4
TxtNombres
BtnAgrega
r
BtnMostrar
BtnLimpiar
LstNombres
Programacin Windows
)i s.lo usamos ReDim a/8!# tambi%n tendremos once elementos en el array# pero todos
tendr*n un valor cero# es decir# si no se usa &reserve# se pierden los valores contenidos
en el array"
%liminar $n Array De &a "emoria/
)i en alg?n momento del programa queremos eliminar el contenido de un array# por
e'emplo para que no siga ocupando memoria# ya que es posible que no siga ocupando
memoria# podemos usar Erase seguida del array que queremos 9limpiar9# por e'emplo(
Erase a
Esto eliminar* el contenido del array a"
)i despu%s de eliminar el contenido de un array queremos volver a usarlo# tendremos
que ReDimensionarlo con el mismo n?mero de dimensiones que ten$a# ya que Erase
s.lo borra el contenido# no la definici.n del array"
%0ercicio #ractico 123
/"0 Dise:ar el siguiente formulario
&ublic ;lass +orm/
Dim nombres8! As )tring
&rivate )ub btnagregarG;lic7
If Ee"tAtnombre"TeAt"Trim HI 99 Then
nombresU-oundnombres!! = Ee"tAtnombre"TeAt
ReDim &reserve nombresU-oundnombres! J /!
Esg-oA9Kuardado """L9# Esg-oA)tyle"Information# 9Arreglos9!
Ee"tAtnombre";lear!
Ee"tAtnombre"+ocus!
Prof. Carlos David Castilla !iro" Pgina 5
Programacin Windows
Else
Esg-oA9&or +avor Ingrese un 2ombre9# Esg-oA)tyle"Information#
9Arreglos9!
Ee"tAtnombre";lear!
Ee"tAtnombre"+ocus!
End If
End )ub
&rivate )ub btnmostrarG;lic7
Dim A As Integer
+or A = 8 To U-oundnombres! 0 /
Ee"lstnombres"Items"AddnombresA!!
2eAt
ReDim nombres8!
End )ub
&rivate )ub btnlimpiarG;lic7
Ee"lstnombres"Items";lear!
End )ub
End ;lass
%structuras
&odemos combinar elementos de datos de distintos tipos para crear una combinaci.n de
tipos de datos ?nica denominada estructura" Las estructuras resultan ?tiles cuando
deseamos que una ?nica variable guarde varias pie>as de informaci.n relacionadas"
Despu%s de declarar una estructura# podemos declarar variables de ese tipo"
Definici4n"0Una estructura es una combinaci.n de tipos de datos que se crea
combinando otros tipos de datos" Las estructuras son de tipo valor es decir# una
variable de tipo estructura contiene los datos de la estructura# en lugar de una referencia
a los datos como hace el tipo referencia!" Las estructuras pueden tener datos#
propiedades# m%todos y procedimientos y pueden invocar y manipular eventos"
%0emplo
El uso m*s simple y habitual de las estructuras es encapsular variables relacionadas#
creando un tipo de datos definido por el usuario" &or e'emplo# es posible que deseemos
guardar 'untos el nombre# fecha de contrataci.n# cargo y salario de un empleado"
&odr$amos utili>ar varias variables para esta informaci.n# o podemos definir una
estructura y utili>arla como la variable de un ?nico empleado" La venta'a de la
estructura se hace patente cuando tiene muchos empleados y# por tanto# muchas
instancias de la variable" El siguiente e'emplo muestra una estructura Employee simple(
Prof. Carlos David Castilla !iro" Pgina 6
Programacin Windows
#ublic *tructure %mployee
&ublic +irst2ame As )tring
&ublic Last2ame As )tring
&ublic HireDate As Date
&ublic MobTitle As )tring
&rivate )alary As Decimal
%nd *tructure
C4mo Declarar %structuras
C4mo $tili)ar &as %structuras
Prof. Carlos David Castilla !iro" Pgina 7
Programacin Windows
%0ercicio #ractico 125
/"0 Agregar un Eodulo a la aplicaci.n y escribir el siguiente c.digo"
Eodule Eodule/
NDeclaramos la estructura
&ublic )tructure DatosAlumnos
&ublic codigo As Integer
&ublic nombre As )tring
&ublic curso As )tring
&ublic promedio As Integer
End )tructure
NDeclaramos un arrays que me almacenen los valores
&ublic alumnos8! As DatosAlumnos
End Eodule
1"0 Luego dise:ar el siguiente formulario
<"0 En el evento clic7 del bot.n btnagregar codificaremos lo siguiente
&rivate )ub btnagregarG;lic7
NDeclarar una variable para manipular la estructura
Dim mialumno As DatosAlumnos
NAsignar valores a la estructura
Oith mialumno
"codigo = U-oundalumnos! J /
"nombre = tAtnombre"TeAt
"curso = tAtcurso"TeAt
"promedio = tAtpromedio"TeAt
End Oith
NAgregar valores al arrays de la estructura
alumnosU-oundalumnos!! = mialumno
NRedimensionar la matri> manteniendo la los valores
ReDim &reserve alumnosU-oundalumnos! J /!
NEostrar mensa'e de Datos Agregados
Esg-oA9Datos Agregados"""9# Esg-oA)tyle"Information# 9Alumnos9!
Prof. Carlos David Castilla !iro" Pgina 8
txtnombre
txtcurso
txtpromedi
o
btnagreg
ar
btnconsultar
Programacin Windows
NLimpiamos las ca'as de teAtos
tAtnombre"TeAt = 99
tAtcurso"TeAt = 99
tAtpromedio"TeAt = 99
tAtnombre"+ocus!
End )ub
&rivate )ub btnconsultarG;lic7
+rmconsulta")ho6!
End )ub
C"0 Luego dise:aremos el siguiente formualrio"
6/7 &uego en el e!ento load del formulario frmconsulta/
&rivate )ub +rmconsultaGLoad
+rminscribir"Hide!
End )ub
&rivate )ub btnconsultarG;lic7
Dim mialumno As DatosAlumnos
Dim A As )tring = tAtconsulta"TeAt
mialumno = alumnosA 0 /!
tAtcodigo"TeAt = mialumno"codigo
tAtnombre"TeAt = mialumno"nombre
tAtcurso"TeAt = mialumno"curso
tAtpromedio"TeAt = mialumno"promedio
tAtconsulta"TeAt = 99
tAtconsulta"+ocus!
End )ub
&rivate )ub btninscribirGclic7
+rminscribir")ho6!
Ee";lose!
End )ub
Prof. Carlos David Castilla !iro" Pgina 9
txtconsul
ta
txtcodig
o
txtnomb
re
txtcurs
o
txtpromedi
o
btninscribi
r
btnconsult
ar
Programacin Windows
"ane0o de Array&ist
Esta es una colecci.n donde podemos guardar cualquier tipo de ob'eto" )u m%todo
Array&ist/Add! acepta el tipo object# por lo cual podemos coleccionar enteros#
cadenas# listboAes# botones# y casi cualquier cosa que se nos ocurraP El acceso a sus
elementos se logra por medio de la posici.n o $ndice" &odemos utili>ar su propiedad
Array&ist/Count para preguntarle a la colecci.n cuantos elementos tiene
Esta clase permite la creaci.n y manipulaci.n de arrays cuyo tama:o puede ser
modificado din*micamente"
Este comportamiento del ob'eto tiene la venta'a de que me'ora el rendimiento y
optimi>a recursos# puesto que cada ve> que a:adimos o eliminamos valores# el array
items no siempre tiene que ser
redimensionado"
QRu% sucede# sin embargo#
cuando se han a:adido valores
y el array est* completoS# pues
que el ob'eto ArrayList detecta
esta situaci.n y en la siguiente
ocasi.n en que se a:ade un
nuevo valor# autom*ticamente
se redimensiona duplicando el
Prof. Carlos David Castilla !iro" Pgina !
Programacin Windows
n?mero de elementos inicial que conten$a" ,eamos de nuevo un esquema de
funcionamiento"
8orrado de %lementos en una Colecci4n Arraylist
&ara reali>ar un borrado de valores# la clase ArrayList proporciona los m%todos
descritos a continuaci.n"
T emo!e(Valor)" Elimina el elemento del array que corresponde a ,alor"
T emo!eAt(#osicion)" Elimina el elemento del array situado en el $ndice
&osici.n"
T emo!eange (#osici4n9 %lementos)" Elimina el con'unto de elementos
indicados en el par*metro Elementos# comen>ando por el $ndice &osici.n"
T Clear ( )" Elimina todos los elementos del ob'eto"
(%numerator
Un ob'eto enumerador pertenece al interfa> IEnumerator# dise:ado para reali>ar un
recorrido o iteraci.n a trav%s de uno de los diferentes tipos de colecci.n arrays
incluidos! eAistentes en "2ET +rame6or7" Eediante el m%todo KetEnumerator ! de un
ob'eto array# obtenemos un ob'eto que implementa el interfa> Ienumerator# que s.lo
puede reali>ar labores de lectura sobre el array# en ning?n caso de modificaci.n"
La estructura de control utili>ada para recorrer el array# puede ser indistintamente un
bucle +or"""2eAt# +or Each"""2eAt# o la novedosa t%cnica de los ob'etos enumeradores
proporcionados por el ob'eto array"
Prof. Carlos David Castilla !iro" Pgina
Programacin Windows
%0ercicio #r:ctico 123
/"0 Dise:ar el siguiente formulario"
1"0 ;odificaremos lo siguiente(
&ublic ;lass +orm/
NDeclaramos nuestro ArrayList
Dim lista As 2e6 ArrayList!
&rivate )ub +orm/GLoad
NAgregamos elementos a nuestro ArrayList
lista"Add9Lima9!
lista"Add9Lambayeque9!
lista"Add9Tru'illo9!
lista"Add9Tacna9!
lista"Add9Arequipa9!
lista"Add9&uno9!
End )ub
&rivate )ub btnordenarG;lic7
If Ee"cbociudad"Items";ount HI 8 Then
Ee"cbociudad"Items";lear!
N)irve para ordenar los elementos de un ArrayList
lista")ort!
NDeclaramos nuestro IEnumerator
Dim recorrer As IEnumerator
recorrer = lista"KetEnumerator
Ohile recorrer"Eove2eAt
NAgrega el elemento actual del Array
Ee"cbociudad"Items"Addrecorrer";urrent!
Prof. Carlos David Castilla !iro" Pgina 2
"bo"iuda
d
TxtTot
al
Txt"iud
ad
Programacin Windows
End Ohile
Else
Esg-oA9&rimero debe de ;argar las ;iudades9# Esg-oA)tyle"Information#
9ArrayList9!
End If
End )ub
&rivate )ub btn,erG;lic7
NEuestra el Total de Elementos del ArrayList
Ee"tAtTotal"TeAt = lista";ount
End )ub
&rivate )ub btncargarG;lic7
Ee"cbociudad"Items";lear!
N;argamos el combo con un +or
+or A As Integer = 8 To lista";ount 0 /
Ee"cbociudad"Items"AddlistaA!!
2eAt
End )ub
&rivate )ub btnenumeradorG;lic7
Ee"cbociudad"Items";lear!
N;argamos el ;ombo con un IEnumerator
Dim recorrer As IEnumerator
NAsigna el numero de elementos de mi ArrayList
recorrer = lista"KetEnumerator
Ohile recorrer"Eove2eAt
Ee"cbociudad"Items"Addrecorrer";urrent!
End Ohile
End )ub
&rivate )ub btnlimpiarG;lic7
NElimina los elementos del ;ombo
Ee"cbociudad"Items";lear!
End )ub
&rivate )ub btncapacidadG;lic7
NEuestra la capacidad de almacenamiento del ArrayList
Esg-oAlista";apacity!
End )ub
&rivate )ub btnagregarG;lic7
NAgregar un elemento al ArrayList
lista"AddEe"tAtciudad"TeAt!
End )ub
End ;lass
Prof. Carlos David Castilla !iro" Pgina 3
Programacin Windows
&a Clase ;as<,able
Esta clase tiene la particularidad de que el acceso a los valores del array que gestiona
internamente se reali>a a trav%s de una clave asociada a cada elemento# al estilo de los
ob'etos Dictionary de versiones anteriores de ,-" ;omo dato significativo# esta clase
implementa el interfa> IDictionary# por lo que si hemos utili>ado anteriormente ob'etos
Dictionary# ya conocemos gran parte de su filosof$a de traba'o"
En este tipo de colecci.n no es necesario preocuparse por la posici.n o $ndice de los
elementos# ya que accedemos a ellos a trav%s de literales# lo cual en algunas
circunstancias es mucho m*s c.modo de mane'ar"
Respecto a la asignaci.n de valores a la colecci.n# esta clase utili>a el m%todo Add !#
cuyo primer par*metro corresponde a la clave del elemento y el segundo corresponde al
valor que vamos a asignar a la posici.n de su array"
Las propiedades =eys y Values de la clase Hashtable# devuelven un array con los
nombres de las claves y los valores de un ob'eto Hashtable respectivamente"
"ane0o del (Dictonary%numerator
)i queremos recorrer el array al completo contenido en el ob'eto# podemos utili>ar el
m%todo KetEnumerator !# que nos devuelve un enumerador para poder obtener todos
los valores del ob'eto en un bucle" La diferencia con los otros algoritmos de recorrido
que hemos visto anteriormente# es que al estar la colecci.n Hashtable basada en una
combinaci.n de claveUvalor# necesitamos un enumerador basado en el interfa>
IDictionaryEnumerator# especialmente adaptado para manipular arrays de este tipo"
;omo habr* comprobado el lector# un enumerador IDictionaryEnumerator proporciona
la informaci.n de la colecci.n mediante las propiedades Vey y ,alue# a diferencia de un
enumerador simple# basado en IEnumerator# en el que usamos la propiedad ;urrent#
para eAtraer los datos"
La clase Hashtable no sit?a los valores que se a:aden al array en posiciones
consecutivas# por lo que al obtener los valores mediante un enumerador posiblemente
no aparecer*n en el mismo orden en el que los a:adimos inicialmente" Dada la filosof$a
de funcionamiento de este tipo de ob'etos# el orden en el que se graban los valores
dentro del array no deber$a ser un problema# ya que nosotros accedemos al array
utili>ando claves y no $ndices# como sucede en un array est*ndar"
Prof. Carlos David Castilla !iro" Pgina 4
Programacin Windows
%0ercicio #r:ctico 12>
/"0 Dise:ar el )iguiente +ormulario(
1"0 ;odificaremos lo siguiente(
&ublic ;lass +orm1
NDeclaramos un ob'eto HashTable
Dim clientes As 2e6 Hashtable
&rivate )ub btnguardarG;lic7
NAgregamos elementos a nuestro HashTable
NLe asignamos un codigo y un valor para cada elemento ingresado
clientes"AddEe"tAtcod"TeAt# Ee"tAtnom"TeAt!
Esg-oA9Datos KuardadosL"""9# Esg-oA)tyle"Information# 9HashTable9!
Ee"tAtcod";lear!
Ee"tAtnom";lear!
Ee"tAtcod"+ocus!
End )ub
&rivate )ub btnmostrarG;lic7
NRecorremos el HashTable con el IDictonaryEnumerator
N5 cada elemento recorrido lo agregamos en los
Ndos List-oAs
Dim RE;W As IDictionaryEnumerator
RE;W = clientes"KetEnumerator
Ohile RE;W"Eove2eAt
Ee"lstcod"Items"AddRE;W"Vey!
Ee"lstnom"Items"AddRE;W",alue!
End Ohile
Prof. Carlos David Castilla !iro" Pgina 5
Txt"
od
TxtNo
m
LstNo
m
Lst"o
d
Programacin Windows
End )ub
End ;lass
&a Clase *orted&ist
Esta clase es una variaci.n de Hashtable# ya que nos permite crear colecciones basadas
en pares de claves y valor# pero con la diferencia de que en una colecci.n )ortedList# los
elementos se ordenan por la clave seg?n van siendo agregados" El funcionamiento
general# es b*sicamente igual que para los ob'etos Hashtable"
%0ercicio #r:ctico 126
/"0 Dise:ar el siguiente formulario
1"0 ;odificaremos lo siguiente(
&ublic ;lass +orm<
NDeclaramos nuestro )ortedList
Dim letras As 2e6 )ortedList
&rivate )ub +orm<GLoad
NAgregamos valores
letras"Add9H9# ///!
letras"Add9A9# 111!
letras"Add9M9# <<<!
letras"Add9X9# CCC!
letras"Add9E9# 333!
End )ub
&rivate )ub -tnEostrarG;lic7
NRecorremos los elementos del )ortedList y lo agregaremos al List,ie6
Dim reco As IDictionaryEnumerator
reco = letras"KetEnumerator
Ohile reco"Eove2eAt
Dim lst As 2e6 List,ie6Itemreco"Vey"To)tring!
lst")ubItems"Addreco",alue"To)tring!
Prof. Carlos David Castilla !iro" Pgina 6
List#ie
$
Programacin Windows
Ee"List,ie6/"Items"Addlst!
End Ohile
Prof. Carlos David Castilla !iro" Pgina 7

You might also like