Sei sulla pagina 1di 16

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones

1/16
Arrays y colecciones
Arrays
Introduccin.
En C#un array es un dato de tipo referencia. Un array es una estructura de datos que
contiene variables (elementos) a los que se accede a travs de ndices.

Todos los elementos de un array son del mismo tipo. Se dice entonces que se es el tipo
del array. As, se habla por ejemplo, de un array de enteros o un array de string, etc,
dependiendo de que los elementos del array sean de un tipo o de otro.

Un array puede tener ms de una dimensin. Por cada dimensin de un array se necesita
un nivel de ndices para acceder a sus elementos.
Para declarar un array se especifica el tipo de dato de los elementos seguido de
unos corchetes vacos y del nombre del array que es una referencia al objeto
array. Por ejemplo:
i nt [ ] unAr r ay;

La lnea anterior declara unAr r ay como una referencia a un array de enteros. Despus
de esta lnea unAr r ay es una referencia que contiene nul l , ya que no referencia a
ningn array.

Como cualquier otro objeto, para crear un array de cualquier tipo se utiliza el operador
new, que devuelve un array del nmero de elementos que se especifique en el nmero
entre corchetes. As, para crear un array de st r i ng de 100 elementos, se escribe:

st r i ng[ ] unSt r i ng;
unSt r i ng = new st r i ng[ 100] ;

o bien, en una sola lnea:

st r i ng[ ] unSt r i ng = new st r i ng[ 100] ;

Aqu, se ha creado con new- un objeto que es un array de 100 st r i ng, se declara una
referencia al array unSt r i ng-, y se asigna el objeto a la referencia.

En un array de N elementos el primero tiene ndice 0 y el ltimo N- 1. Para acceder a un
elemento cualquiera, se utiliza el ndice. Por ejemplo, para almacenar el valor 12 en el
primer elemento de un array, se puede escribir:

/ / def i ne un ar r ay de ent er os de 23 el ement os
i nt [ ] unAr r ay=new i nt [ 23] ;
/ / al macena 12 en el pr i mer el ement o del ar r ay
unAr r ay[ 0] =12;

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
2/16
La sintaxis de la declaracin e inicializacin de un array es bastante flexible. Se puede,
como se ha hecho anteriormente, declarar un array sin inicializarlo, y posteriormente
inicializarlo.

Por ejemplo:

st r i ng[ ] unAr r ay;

/ / Cdi go

unAr r ay=new st r i ng[ 3] ;


unAr r ay[ 0] =Eduar do;
unAr r ay[ 1] =Bor j a;
unAr r ay[ 2] =Gabr i el ;

Tambin es posible declararlo e inicializarlo directamente, sin utilizar el operador new:

st r i ng[ ] unAr r ay={Eduar do, Bor j a, Gabr i el };

Lo anterior es equivalente a :

st r i ng[ ] unAr r ay= new st r i ng[ ] {Eduar do, Bor j a, Gabr i el };

o bien

st r i ng[ ] unAr r ay= new st r i ng[ 3] {Eduar do, Bor j a, Gabr i el };

El nmero de elementos que define la longitud de un array debe ser constante. Por eso,
no es posible inicializar un array de esta manera:

i nt unEnt er o=3;
st r i ng [ ] unAr r ay= new st r i ng[ unEnt er o] {Eduar do, Bor j a, Gabr i el };

Para poder compilar, es necesario cambiar la primera de las dos lneas. Se ha de sustituir
por la lnea:

const i nt unEnt er o=3;


Los arrays son objetos
En C#, los arrays son objetos. Adems, todos los arrays, de cualquier tipo derivan de la
clase Syst em. Ar r ay, que es el tipo base abstracto de todos los tipos de arrays.
La clase Syst em. Ar r ay proporciona muchos mtodos y propiedades para manipular
arrays. Se pueden utilizar las propiedades y otros miembros que tiene esta clase para
manipular los arrays. Por ejemplo, para obtener la longitud de un array se usa la
propiedad Lengt h. El cdigo siguiente asigna la longitud del array unAr r ay, que es 5, a
la variable l ongi t udDel Ar r ay:
i nt [ ] unAr r ay = {1, 2, 3, 4, 5};
i nt l ongi t udDel Ar r ay = unAr r ay. Lengt h;

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
3/16
Es importante tener en cuenta que el tipo Syst em. Ar r ay no es un tipo ar r ay, sino un
tipo del cual derivan todos los tipos ar r ay.

Las propiedades y mtodos ms importantes son las siguientes:

Nota: En los ejemplos se utilizar el siguiente array de enteros:

i nt [ ] unAr r ay=new i nt [ ] {2, 5, 3, 4};

- Lengt h: devuelve el nmero de elementos de un array. Por ejemplo:

i nt l ongi t ud=unAr r ay. Lengt h;

- Get Lengt h: obtiene la longitud de una determinada dimensin cuando el array es
multidimensional. Por ejemplo, para obtener el nmero de elementos de la primera
dimensin:

i nt l ongi t ud=ot r oAr r ay. Get Lengt h( 0) ;

- Sor t y Rever se: Estos mtodos permiten ordenar un array de modo ascendente o
descendente. Son mtodos estticos. Por ejemplo:

Ar r ay. Sor t ( unAr r ay) ;

o bien:

Ar r ay. Rever se ( unAr r ay) ;

En el siguiente ejemplo, se define un array de nombres y se ordenan:

/ / Se cr ea el ar r ay
st r i ng[ ] nombr es={Cr i st i na, Mat i l de, M del Val l e, M Ter esa};

/ / Se or denan al f abt i cament e di chos nombr es
Ar r ay. Sor t ( nombr es) ;

/ / Se i mpr i men l os nombr es or denados
f or ( i nt i =0; i <nombr es. Lengt h; i ++)
Consol e. Wr i t eLi ne( nombr es[ i ] ) ;

La salida de este programa es:

Cr i st i na
Mat i l de
M del Val l e
M Ter esa

Por otro lado, aunque es una clase abstracta, el valor de una referencia de tipo
Syst em. Ar r ay en tiempo de ejecucin puede ser nul l o la referencia a una instancia de
un tipo array. Syst em. Ar r ay no tiene un alias.

Arrays de varias dimensiones.
C#soporta arrays simples de una dimensin-, multidimensionales y arrays de arrays.
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
4/16
Declaracin de arrays
La sintaxis para declarar un array es la siguiente:
Array de una dimensin:

i nt [ ] unAr r ay;
Array multidimensional o matriz rectangular:
st r i ng[ , ] ar r ayMul t i di mensi onal ;
i nt [ , , ] bot ones
Array de arrays:
byt e[ ] [ ] ar r ayDeByt es;
Cuando se declara un array, slo se define una referencia que puede apuntar a un array
de ese tipo, pero que apunta a nul l . En C#los arrays son objetos y para que existan
fsicamente, debe crearse un objeto -deben ser instanciados-. La sintaxis para crear un
array es:
o Array de una dimensin:
i nt [ ] unAr r ay = new i nt [ 5] ;
Con esta sentencia, se crea una referencia a un array de enteros, se crea un array de 5
enteros el objeto- y posteriormente se asigna la referencia anteriormente creada al
array.
o Array multidimensional:
st r i ng[ , ] unaMat r i z = new st r i ng[ 5, 4] ;
i nt [ , , ] ot r aMat r i z = new i nt [ 4, 5, 3] ;

o Array de arrays:
byt e[ ] [ ] ar r ayDeByt es = new byt e[ 5] [ ] ;
f or ( i nt x = 0; x < ar r ayDeByt es. Lengt h; x++)
{
ar r ayDeByt es [ x] = new byt e[ 4] ;
}

Se pueden mezclar matrices rectangulares y arrays de arrays. Por ejemplo:
i nt [ ] [ , , ] [ , ] numer os;


Inicializacin de arrays
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
5/16
C# proporciona una manera simple de declarar, crear e inicializar un array
simultneamente, incluyendo los valores iniciales entre llaves {}. Si no se hace as, el
compilador lo inicializa automticamente al valor por defecto.
A continuacin se muestran distintos caminos para inicializar diferentes tipos de arrays.
o Array de una dimensin
i nt [ ] unAr r ay = new i nt [ 5] {1, 2, 3, 4, 5};
st r i ng[ ] ot r oAr r ay = new st r i ng[ 3] {" Pabl o" , " Ar ant za" , " Mar co" };
Puede omitirse el tamao del array cuando se inicializa:
i nt [ ] unAr r ay = new i nt [ ] {1, 2, 3, 4, 5};
st r i ng[ ] ot r oAr r ay = new st r i ng[ ] {" Pabl o" , " Ar ant za" , " Mar co" };
Se puede omitir new si se inicializa:
i nt [ ] unAr r ay = {1, 2, 3, 4, 5};
st r i ng[ ] ot r oAr r ay = {" Pabl o" , " Ar ant za" , " Mar co" };
o Array multidimensional:
i nt [ , ] num= new i nt [ 3, 2] { {1, 2}, {3, 4}, {5, 6} };
st r i ng[ , ] par =new st r i ng[ 2, 2] {{" J uan" , " Ana" }, {" Al ber t o" , " Mar i a" } };
Se puede omitir el tamao:
i nt [ , ] num= new i nt [ , ] { {1, 2}, {3, 4}, {5, 6} };
st r i ng[ , ] par = new st r i ng[ , ] { {" J uan" , " Ana" }, {" Al ber t o" , " Mar i a" } };
Tambin la clusula new si se inicializa:
i nt [ , ] num= { {1, 2}, {3, 4}, {5, 6} };
st r i ng[ , ] par = { {" J uan" , " Ana" }, {" Al ber t o" , " Mar i a" } };
o Arrays de arrays
Se puede inicializar de la siguiente forma:
i nt [ ] [ ] num= new i nt [ 2] [ ] {new i nt [ ] {2, 3, 4}, new i nt [ ] {5, 6, 7, 8, 9} };
u omitir el tamao:
i nt [ ] [ ] nums = new i nt [ ] [ ] {new i nt [ ] {2, 3, 4}, new i nt [ ] {5, 6, 7, 8, 9}};


Acceso a los miembros de un array
Se accede a los elementos de un array de manera similar a como se hace en C y C++.
Por ejemplo, para acceder al quinto elemento del array y asignarle 27:
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
6/16
i nt [ ] unAr r ay = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
unAr r ay[ 4] = 27;
El siguiente cdigo declara un array multidimensional y asigna 27 al elemento
localizado en [ 1, 1] :
i nt [ , ] ot r oAr r ay = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
ot r oAr r ay[ 1, 1] = 27;
Con los arrays de arrays el acceso es como sigue:
i nt [ ] [ ] t er cer Ar r ay = new i nt [ ] [ ]
{
new i nt [ ] {1, 2},
new i nt [ ] {3, 4}
};
t er cer Ar r ay[ 1] [ 1] = 5;

C#permite dos tipos de array multidimensionales: los arrays rectangulares y los arrays
dentados.
Un array bidimensional rectangular es aquel en el cual todas sus filas tienen
el mismo nmero de columnas. Los arrays que anteriormente se han mostrado
como ejemplos, son rectangulares. En general son sencillos de declarar,
inicializar y manejar. A continuacin se declara un array de st r i ng
bidimensional de cuatro filas y dos columnas:

st r i ng [ , ] mi sNombr es={ {Bor j a, Yosune},
{Gabr i el , Pat r i ci a},
{Mar co, Ar ant xa},
{Eduar do, Lol a} };

La otra alternativa de arrays multidimensionales es el array dentado, es decir, un array
que no es rectangular. Un array bidimensional dentado, es un array en el que cada fila
tinen un nmero diferente de columnas. Aunque evidentemente proporciona una mayor
flexibilidad que el array rectangular, sin embargo son ms complicados de declarar e
inicializar. Para crear un array dentado, bsicamente lo que se hace es crear un array de
arrays:

Por ejemplo:

i nt [ ] [ ] a=new i nt [ 3] [ ] ;
a[ 0] =new i nt [ 4] ;
a[ 1] =new i nt [ 3] ;
a[ 2] =new i nt [ 1] ;

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
7/16
En lugar de usar la coma en el corchete, lo que se hace es usar un corchete extra, por
cada dimensin. Por ejemplo, para declarar un array dentado de tres dimensiones:

i nt [ ] [ ] [ ] unAr r ayDeEnt er os;

Un ejemplo completo puede aclarar esta idea:

st r i ng [ ] [ ] ani mal es=new st r i ng [ 3] [ ] ;
ani mal es[ 0] =new st r i ng[ ] {Bal l ena, Ti bur n, Del f n, Pul po};
ani mal es[ 1] =new st r i ng[ ] {Gor r i n, Lor o, Bui t r e};
ani mal es[ 2] =new st r i ng[ ] {Per r o, Gat o};

/ / Se i mpr i me
f or ( i nt i =0; i <ani mal es. Get Lengt h( 0) ; i ++)
f or ( i nt j =0 ; j < ani mal es[ i ] . Lengt h ; j ++)
Consol e. Wr i t eLi ne( ani mal es [ i ] [ j ] ) ;

Ejemplo:

/ / ar r ays. cs
usi ng Syst em;
cl ass Ej empl oDeDecl ar aci onDeAr r ays
{
publ i c st at i c voi d Mai n( )
{
/ / ar r ay de una di mensi n
i nt [ ] unAr r ay = new i nt [ 5] ;
Consol e. Wr i t eLi ne( " La l ongi t ud de unAr r ay es {0}" ,
unAr r ay. Lengt h) ;

/ / ar r ay Mul t i di mensi onal
st r i ng[ , ] ot r oAr r ay = new st r i ng[ 5, 4] ;
Consol e. Wr i t eLi ne( " La l ongi t ud de ot r oAr r ay es {0}" ,
ot r oAr r ay. Lengt h) ;

/ / Ar r ay de ar r ays
byt e[ ] [ ] ar r ayDeAr r ays = new byt e[ 5] [ ] ;
Consol e. Wr i t eLi ne( " La l ongi t ud de ar r ayDeAr r ays es {0}" ,
ar r ayDeAr r ays. Lengt h) ;

/ / cr ea un ar r ay de ar r ays
f or ( i nt i = 0; i < ar r ayDeAr r ays. Lengt h; i ++)
{
ar r ayDeAr r ays[ i ] = new byt e[ i +3] ;
}

f or ( i nt i = 0; i < ar r ayDeAr r ays. Lengt h; i ++)
{
Consol e. Wr i t eLi ne( " La l ongi t ud de {0} es {1}" , i ,
ar r ayDeAr r ays[ i ] . Lengt h) ;
}
}
}


La salida que se obtiene al ejecutar este programa es:
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
8/16
La l ongi t ud de unAr r ay es 5
La l ongi t ud de ot r oAr r ay es 20
La l ongi t ud de ar r ayDeAr r ays es 5
La l ongi t ud de 0 es 3
La l ongi t ud de 1 es 4
La l ongi t ud de 2 es 5
La l ongi t ud de 3 es 6
La l ongi t ud de 4 es 7


Usando foreach en Arrays
Se puede fcilmente recorrer un array con la sentencia f or each. Esta sentencia
proporciona una manera elegante y sencilla de recorrer los distintos elementos de un
array. Se utiliza para recorrer ms fcilmente la coleccin o el array pero no debera
utilizarse para cambiar los contenidos de la coleccin o array porque puede tener efectos
colaterales no deseados. Por ejemplo, el siguiente cdigo crea un array llamado
unAr r ay :
usi ng Syst em;
cl ass Recor r i endoAr r ays
{
publ i c st at i c voi d Mai n( )
{
i nt [ ] unAr r ay = {4, 5, 6, - 1, 0};
f or each ( i nt i i n unAr r ay)
{
Syst em. Consol e. Wr i t eLi ne( i ) ;
}

}
}

La salida de este cdigo es:

4
5
6
- 1
0

El siguiente programa recorre un array y describe cada uno de sus elementos como par o
impar.

usi ng Syst em;
cl ass Recor r i endoAr r ays
{
publ i c st at i c voi d Mai n( )
{
i nt [ ] unAr r ay = {4, 5, 6, - 1, 27};
i nt par =0;
i nt i mpar =0;
st r i ng dos=" par " ;
st r i ng uno=" i mpar " ;
f or each( i nt i i n unAr r ay)
{
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
9/16
Consol e. Wr i t eLi ne( i ) ;
i f ( i %2==0)
{
par ++;
Consol e. Wr i t eLi ne( " El el ement o {0} es {1}" , i , dos) ;
}


el se
{
i mpar ++;
Consol e. Wr i t eLi ne( " El el ement o {0} es {1}" , i , uno) ;
}
}
Consol e. Wr i t eLi ne( " Hay {0} par es y {1} i mpar es" , par , i mpar ) ;
}
}
}

La salida de este programa es:

4
El el ement o 4 es par
5
El el ement o 5 es i mpar
6
El el ement o 6 es par
- 1
El el ement o - 1 es i mpar
27
El el ement o 27 es i mpar
Hay dos par es y 3 i mpar es
Colecciones
Introduccin
Anteriormente se ha estudiado cmo utilizar los arrays para referenciar un
conjunto de objetos o de variables. Es evidente, sin embargo que los arrays tienen
algunas limitaciones. La mayor de ella es que una vez que el programador ha creado el
array, su tamao no se puede cambiar porque es fijo, constante. El problema se presenta
cuando se pretende aadir nuevos elementos al array, sin crear uno nuevo.

En general, se puede decir que una coleccin se utiliza para trabajar con listas o
conjuntos ordenados de objetos y proporciona una funcionalidad mayor que la de un
simple array. Esta funcionalidad proviene de la implementacin de una serie de
interfaces del namespace Syst em. Col l ect i ons. Este namespace tambin contiene
clases que implementan estos interfaces y facilitan enormemente la tarea del
programador.

Las colecciones proporcionan mtodos bsicos para acceder a los elementos de
la coleccin utilizando corchetes, de manera idntica a como se accede a los elementos
de un array.

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
10/16
C#proporciona una serie de clases e interfaces que estn contenidas en el
namespace Syst em. Col l ect i ons, que nos permite trabajar conjuntos de datos o
colecciones, de manera muy sencilla.

Los interfaces que proporcionan funcionalidad a las colecciones, son los
siguientes:

I Enumer abl e: Proporciona la capacidad para recorrer una coleccin a travs de sus
elementos, por medio de una sentencia f or each.

I Col l ect i on: Hereda de I Enumer abl e. Proporciona la capacidad para obtener el
nmero de elementos de la coleccin y de copiar elementos a un simple array.

o I Li st : Hereda de I Enumer abl e y de I Col l ect i on. Proporciona una lista de los
elementos de la coleccin con las capacidades de los interfaces anteriormente citados y
algunas otras capacidades bsicas.

I Di ct i onar y: Hereda de I Enumer abl e y de I Col l ect i on. Proporciona una lista de
elementos de la coleccin accesibles a travs de un valor en lugar de un ndice.

Los arrays, en C#son objetos de la clase Syst em.Ar r ay que es un tipo de coleccin. La
clase Syst em. Ar r ay hereda de I Li st , I Col l ect i on e I Enumer abl e pero no
proporciona algunas funcionalidades avanzadas de I Li st . Representa una lista de
elementos con un tamao fijo. El programador puede tambin crear sus propias
colecciones especficas.
La clase ArrayList

Una de las clases ms importantes que proporciona el namespace
Syst ems.Col l ect i ons se denomina Syst em.Col l ect i ons.Ar r ayLi st , que implementa
las interfaces I Li st , I Col l ect i on e I Enumer abl e.

Este tipo puede utilizarse para representar una lista de elementos con un tamao
variable, es decir es un array cuyo tamao puede cambiar dinmicamente cuando sea
necesario. Proporciona un determinado nmero de mtodos y propiedades para
manipular sus elementos.

Algunos de los ms importantes son los siguientes:


Adapt er ( )
Mtodo esttico que crea un Ar r ayLi st para un objeto que
implementa I Li st .
Capaci t y
Determina o lee el nmero de elementos del Ar r ayLi st .
Count
El nmero actual de elementos del Ar r ayLi st .
I t em( )
Obtiene o fija el elemento correspondiente a su ndice
determinado.
Add( )
Aade elementos al Ar r ayLi st .
AddRauge ( )
Permite aadir los elementos de una I Col l ect i on al final
del Ar r ayLi st .
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
11/16
Cl ear ( )
Elimina todos los elementos del Ar r ayLi st .
Cont ai ns ( )
Determina si un elemento est en la Ar r ayLi st .
I ndex Of ( )
Devuelve el ndice de un determinado elemento.
I nser t ( )
Inserta un elemento en un Ar r ayLi st .
I nser t Range( )
Inserta elementos de una coleccin en un Ar r ayLi st .
Remove
Elimina un determinado elemento.
RemoveAt
Elimina un determinado elemento accediendo a l a travs de
su ndice.
Sor t ( )
Ordena un Ar r ayLi st .
ToAr r ay( )
Copia los elementos del Ar r ayLi st a un array.


El siguiente ejemplo ilustra bien la diferencia entre un Ar r ay y un Ar r ayLi st puede
ser:

Considere la clase Ani mal almacenada en el fichero Ani mal . cs con el siguiente cdigo:

usi ng Syst em;
namespace Consol eAppl i cat i on2
{
publ i c cl ass Ani mal
{
pr ot ect ed st r i ng nombr e;
publ i c Ani mal ( st r i ng unNombr e)
{
nombr e=unNombr e;
}
publ i c st r i ng Nombr e
{
get
{
r et ur n nombr e;
}
set
{
nombr e=val ue;
}
}
publ i c voi d Comer ( )
{
Consol e. Wr i t eLi ne( " el ani mal {0} ha comi do" , nombr e) ;
}
}
}

A continuacin, modifique el cdigo en el mtodo Mai n( ) por el siguiente:

usi ng Syst em;
namespace Consol eAppl i cat i on2
{
cl ass Mi Apl i caci on
{
st at i c voi d Mai n( st r i ng[ ] ar gs)
{
Consol e. Wr i t eLi ne( " ****Ej empl o de Ar r ay****" ) ;
/ / Se def i ne un ar r ay de dos el ement os de l a cl ase Ani mal
Ani mal [ ] ar r ayAni mal = new Ani mal [ 2] ;
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
12/16
Ani mal gat o=new Ani mal ( " Mi moso" ) ;
ar r ayAni mal [ 0] =gat o;
ar r ayAni mal [ 1] =new Ani mal ( " Andr aj oso" ) ;

/ / se r ecor r e el ar r ay por medi o de l a sent enci a f or each
Consol e. Wr i t eLi ne( " \ nRecor r emos el ar r ay con
f or each" ) ;
f or each( Ani mal an i n ar r ayAni mal )
Consol e. Wr i t eLi ne( an. Nombr e) ;

/ / se r ecor r e el ar r ay por medi o de l a sent enci a f or
Consol e. Wr i t eLi ne( " \ nRecor r emos el ar r ay con una
sent enci a f or " ) ;
f or ( i nt i =0; i <ar r ayAni mal . Lengt h; i ++)
Consol e. Wr i t eLi ne( ar r ayAni mal [ i ] . Nombr e) ;

Consol e. Wr i t eLi ne( " El nmer o de el ement os del ar r ay es
{0}" , ar r ayAni mal . Lengt h) ;
}
}
}

La salida de este programa es:


Figura 7.1

En este ejemplo se observa bien la diferencia que existe cuando se accede a los
elementos del array por medio de las sentencias f or o f or each

En el siguiente ejemplo, se pretende trabajar de forma parecida con una coleccin de
tipo Ar r ayLi st . Para ello, adems de aadir la directiva:

usi ng Syst em. Col l ect i ons;

aada el siguiente cdigo al final del mtodo Mai n( ) :


Consol e. Wr i t eLi ne( " \ n***Ej empl o de Ar r ayLi st *****" ) ;

Ar r ayLi st l i st aAr r ayAni mal es = new Ar r ayLi st ( ) ;
l i st aAr r ayAni mal es. Add( new Ani mal ( " Per i co" ) ) ;
l i st aAr r ayAni mal es. Add( new Ani mal ( " Anqui l osado" ) ) ;
Ani mal pant er a=new Ani mal ( " Mougl i " ) ;
l i st aAr r ayAni mal es. Add ( pant er a) ;
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
13/16
Consol e. Wr i t eLi ne( " El ar r ayl i l st t i ene ahor a {0} el ement os" ,
l i st aAr r ayAni mal es. Count ) ;
/ / Puede ut i l i zar se unAr r ayLi st como un Ar r ay
/ / Los el ement os de un Ar r ayLi st son obj et os, y es necesar i o
/ / conver t i r l os a obj et os de l a cl ase Ani mal al ut i l i zar l o como ar r ay
Consol e. Wr i t eLi ne( " \ nRecor r emos l a col ecci on con una sent enci a f or " ) ;
f or ( i nt i =0; i <l i st aAr r ayAni mal es. Count ; i ++)
Consol e. Wr i t eLi ne( " Nombr e: {0} " ,
( ( Ani mal ) l i st aAr r ayAni mal es[ i ] ) . Nombr e) ;
Consol e. Wr i t eLi ne( " \ nRecor r emos l a col ecci on con una sent enci a
f or each" ) ;
/ / Aqu no es necesar i a l a conver si n
f or each( Ani mal an i n l i st aAr r ayAni mal es)
Consol e. Wr i t eLi ne( an. Nombr e) ;
/ / Un Ar r ayLi st puede cambi ar de t amao
Consol e. Wr i t eLi ne( " \ n*****Ej empl o de cambi o de t amao en el
Ar r ayLi st ***" ) ;
Consol e. Wr i t eLi ne( " Aadi mos ahor a ar r ay cr eado al comi enzo" ) ;
l i st aAr r ayAni mal es. AddRange( ar r ayAni mal ) ;
Consol e. Wr i t eLi ne( " El ar r ayl i l st t i ene ahor a {0} el ement os" ,
l i st aAr r ayAni mal es. Count ) ;
Consol e. Wr i t eLi ne( " \ nRecor r emos el ar r ay con una sent enci a f or " ) ;
f or ( i nt i =0; i <l i st aAr r ayAni mal es. Count ; i ++)
Consol e. Wr i t eLi ne( " Nombr e: {0} " ,
( ( Ani mal ) l i st aAr r ayAni mal es[ i ] ) . Nombr e) ;
Consol e. Wr i t eLi ne( " \ nRecor r emos el ar r ay con una sent enci a f or each" ) ;
f or each( Ani mal an i n l i st aAr r ayAni mal es)
Consol e. Wr i t eLi ne( an. Nombr e) ;

La salida de este programa es:

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
14/16

Figura 7.2

En el anterior ejemplo se han creado dos colecciones de objetos: el primero utiliza la
clase Syst em. Ar r ay que de hecho es una coleccin-, y el segundo utiliza la clase
Syst em. Col l ect i ons. Ar r ayLi st . Ambas colecciones tienen objetos de la clase
Ani mal que est definida en el fichero Ani mal . cs. Respecto a la manipulacin del
array, probablemente el lector encontrar pocas dificultades para su comprensin. Sin
embargo, es importante sealar aqu que cuando se crea un array se especifica un
tamao, que ser fijo y constante a lo largo del programa:

Ani mal [ ] ar r ayAni mal = new Ani mal [ 2] ;

Cuando se crea un objeto de la clase Ar r ayLi st , no se define ningn tamao. Para crear
la coleccin, simplemente se utiliza el cdigo siguiente:

Ar r ayLi st l i st aAr r ayAni mal es = new Ar r ayLi st ( ) ;

Existen otros dos constructores de esta clase. El primero de ellos, utiliza como
parmetro una coleccin y el otro, especifica la capacidad la propiedad capaci t y- o
nmero de elementos inicial de la coleccin y se pasa como parmetro entero.

Inicialmente, la coleccin Ar r ayLi st no tiene ningn elemento. No se puede aadir
objetos a travs del ndice, como en los arrays. Para ello, se utiliza el mtodo Add( )
como se ve en el ejemplo:

Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
15/16
l i st aAr r ayAni mal es. Add( new Ani mal ( " Per i co" ) ) ;
l i st aAr r ayAni mal es. Add( new Ani mal ( " Anqui l osado" ) ) ;
Ani mal pant er a=new Ani mal ( " Mougl i " ) ;
l i st aAr r ayAni mal es. Add ( pant er a) ;


Una vez que se ha aadido un elemento, se puede modificar como si fuera un array,
aunque no se ha hecho anteriormente. Por ejemplo:

l i st aAr r ayAni mal es[ 0] =new Ani mal ( " Pepe" ) ;

Se puede recorrer, por medio de una sentencia f or each, tanto un array como un
Ar r ayLi st porque ambos implementan la interface I Enumer abl e:

f or each( Ani mal an i n ar r ayAni mal )
Consol e. Wr i t eLi ne( an. Nombr e) ;

f or each( Ani mal an i n l i st aAr r ayAni mal es)
Consol e. Wr i t eLi ne( an. Nombr e) ;

Se puede acceder al nmero de elemento o tamao de un array por medio de la
propiedad Lengt h:

Consol e. Wr i t eLi ne( " El nmer o de el ement os del ar r ay es {0}" ,
ar r ayAni mal . Lengt h) ;

Y al tamao de una coleccin Ar r ayLi st por medio de la propiedad Count , gracias a
que esta clase implementa la interface I Col l ect i on:

Consol e. Wr i t eLi ne( " El ar r ayl i st t i ene ahor a {0} el ement os" ,
l i st aAr r ayAni mal es. Count ) ;

La diferencia ms importante es que un array est fuertemente tipado, y permite acceder
a sus elementos directamente:

Consol e. Wr i t eLi ne( ar r ayAni mal [ i ] . Nombr e) ;

Cuando se accede a los elementos por medio del ndice debe realizarse una conversin
de tipos:

Consol e. Wr i t eLi ne( " Nombr e: {0} " ,
( ( Ani mal ) l i st aAr r ayAni mal es[ i ] ) . Nombr e) ;

Finalmente, pueden eliminarse objetos de una coleccin por medio de los mtodos

Remove( obj ect unObj et o) o RemoveAt ( i nt i ndi ce) .

Por ejemplo, si se pretende eliminar el elemento gat o y el primer elemento de la
coleccin, han de aadirse estas lneas al final del cdigo del mtodo Mai n( ) :

l i st aAr r ayAni mal es. Remove( gat o) ;
l i st aAr r ayAni mal es. RemoveAt ( 0) ;
Consol e. Wr i t eLi ne( " El ar r ayl i st t i ene ahor a {0} el ement os" ,
l i st aAr r ayAni mal es. Count ) ;
Marco Besteiro y Miguel Rodrguez Arrays y Colecciones
16/16

Adems puede obtenerse el ndice de un determinado elemento por medio del mtodo
I ndexOf ( ) , por ejemplo:

Consol e. Wr i t eLi ne( l i st aAr r ayAni mal es. I ndexOf ( gat o) ) ;

Si no existe el elemento en la coleccin, este mtodo devuelve 1.

Adems, puede aadirse una coleccin a un objeto de la clase Ar r ayLi st , por medio
del mtodo AddRange( ) , al que se le pasa la coleccin como parmetro. Dicha
coleccin puede ser tambin un array, que es una coleccin tambin. Por ejemplo, en la
siguiente lnea se aade el array ar r ayAni mal al Ar r ayLi st :

l i st aAr r ayAni mal es. AddRange( ar r ayAni mal ) ;

Las colecciones son imprescindibles para trabajar con algunos controles como Li st Box,
ComboBox, etc, y su conocimiento reduce enormemente el esfuerzo de la programacin
de este tipo de controles.

Potrebbero piacerti anche

  • Colores Aura
    Colores Aura
    Documento1 pagina
    Colores Aura
    ma.fm90
    Nessuna valutazione finora
  • 11 Daat
    11 Daat
    Documento5 pagine
    11 Daat
    ma.fm90
    Nessuna valutazione finora
  • 11 Daat
    11 Daat
    Documento5 pagine
    11 Daat
    ma.fm90
    Nessuna valutazione finora
  • Pactum Anonimo
    Pactum Anonimo
    Documento46 pagine
    Pactum Anonimo
    Germán Fernández Dovalo
    81% (26)
  • A Portes 2008
    A Portes 2008
    Documento101 pagine
    A Portes 2008
    alirpe
    Nessuna valutazione finora