Está en la página 1de 19

Arrays y Colecciones

Arreglos (Arrays) y colecciones (Collections) en C#.

Un array es un grupo de datos, del mismo tipo, los cuales están agrupados por un único
nombre (variable), y sus elementos pueden ser accesados por medio de índices. Los array
pueden ser de una o más dimensiones y al declararse se instancia un objeto de la subclase
System.Array. Una colección es un conjunto de objetos, los cuales pueden incrementarse o
disminuirse de forma dinámica. Por otro lado, las colecciones son clases del espacio de
nombres System.Collections.

Arreglos unidimensionales.

Los arreglos unidimensionales o de dimensión simple también llamados vectores es un tipo de


datos estructurado que está conformado por una colección finita de elementos del mismo tipo. Para
referirse a un elemento del arreglo se debe especificar el nombre del arreglo y el número de la
posición de ese elemento en el arreglo. El primer elemento del arreglo es la posición o índice cero
(0). El número de la posición en corchetes ([ ]) recibe el nombre de subíndice y dicho subíndice
debe ser un número entero.
Para declarar un arreglo unidimensional se debe especificar el tipo de dato de los
elementos seguido de corchetes vacíos y del nombre del array. Por ejemplo:

int[] arreglo;

Como los arreglos son objetos de la clase System.Array, cuando se declaran aún no se le
ha reservado un espacio de memoria, por lo tanto, es necesario instanciarlos y para esto
se utiliza el operador new. Por ejemplo, para instanciar un arreglo de tipo entero y 10
elementos, se debería escribir lo siguiente:

int[] números;
números= new int [10];
O también
int[] números=new int[10];

Para inicializar un arreglo unidimensional se puede realizar de diversas formas:

- Declarar el arreglo, instanciarlo y luego inicializarlo.

int[] números;
números= new int [3];
números [0]=10;
números [1]=24;
[2]=33;

- Inicializándolo directamente.

int[] numeros = new int[5] {10, 24, 33, 46, 57};


string[] nombres = new string[3] {"Carlos", "Nubia", "Martha"};

- Omitiendo el tamaño del arreglo al inicializarlo.

int[] numeros = new int[] {10, 24, 33, 46, 57};


string[] nombres = new string[] {"Carlos", "Nubia", "Martha"};

- Omitiendo el operador new para inicializarlo:

1
Arrays y Colecciones

int[] numeros = {10, 24, 33, 46, 57};


string[] nombres = {"Carlos", "Nubia", "Martha"};

Como los arreglos en C# son objetos y estos se derivan de la clase System.Array. Dicha
clase proporciona métodos y propiedades para manipular los arreglos. A continuación, se
relacionan algunas propiedades y métodos:

Método o propiedad Descripción


IsFixedSize Propiedad que obtiene un valor que indica si
el arreglo tiene un tamaño fijo.
Length Propiedad que obtiene el número total de
elementos de un arreglo.
Rank Propiedad que obtiene el rango (número de
dimensiones) de arreglo.
Clear Establece en 0 o null un intervalo de
elementos de un arreglo.
Copy Copia un intervalo de elementos de un
arreglo en otro arreglo.
GetValue() Obtiene el valor de la posición especificada
en un arreglo unidimensional.
SetValue() Establece un valor en el elemento situado en
la posición especificada de un arreglo
unidimensional.
IndexOf Devuelve el índice de la primera aparición de
un elemento especificado en un arreglo
unidimensional.
LastIndexOf Devuelve el índice de la última aparición de
un elemento especificado en un arreglo
unidimensional.
Reverse Invierte los elementos de un arreglo
unidimensional.
Sort Ordena los elementos de un arreglo
unidimensional.

Ejemplo práctico arreglos unidimensionales.

 Crear sitio Web vacío ASP.NET llamado Arreglos_Colecciones, y adicionar un


nuevo formulario llamado arreglosunidimensionales.aspx, que permita inicializar
un arreglo de números enteros con 8 valores y un arreglo de caracteres con 5
nombres. Se deberá imprimir los arreglos, su respectiva longitud, además, invertir
y ordenar sus elementos.

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 7 Label


(lbltitulo, lblenteros, lblstring, lbllongitudenteros, lbllongitudstring,
lblarreglosinvertidos, lblarreglosordenados), 8 TextBox (txtarregloenteros,
txtarreglostring, txtlongitudenteros, txtlongitudstring, txtenterosinvertidos,
txtstringinvertidos, txtenterosordenados, txtstringordenados) y 1 Button (botón). La
interfaz se deberá visualizar como se aprecia en la siguiente figura:

2
Arrays y Colecciones

Figura 58. Formulario Web – arreglos unidimensionales.

Fuente: autor.

b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

protected void boton_Click(object sender, EventArgs e)


{
int[] arregloenteros = new int[8] { 10, 8, 16, 20, 2, 80, 25, 30 };
string[] arreglostring = new string[5] { "Vanessa", "Carlos", "José","Maria", "Hernando"
};
for (int i = 0; i < arregloenteros.Length; i++)
txtenteros.Text = txtenteros.Text + arregloenteros[i] + ",";
foreach(String palabra in arreglostring )
txtstring.Text = txtstring.Text + palabra + ",";
txtlongitudenteros.Text = "" + arregloenteros.Length;
txtlongitudstring.Text = ""+arreglostring.Length;
Array.Reverse(arregloenteros);
foreach (int numero in arregloenteros)
txtenterosinvertidos.Text = txtenterosinvertidos.Text + numero + ",";
Array.Reverse(arreglostring);
foreach (String palabra in arreglostring)
txtstringinvertidos.Text = txtstringinvertidos.Text + palabra + ",";
Array.Sort(arregloenteros);
foreach (int numero in arregloenteros)
txtenterosordenados.Text = txtenterosordenados.Text + numero + ",";
Array.Sort(arreglostring);
foreach (String palabra in arreglostring)
txtstringordenados.Text = txtstringordenados.Text + palabra + ",";
}

Inicialmente se definen dos arreglos: arregloenteros al cual se le asignan 8 valores


numéricos y arreglostring al cual se le asigna 5 palabras.
Se utiliza la estructura for para imprimir el arreglo de enteros y la estructura foreach para
imprimir el arreglo string. Con la función Length() se obtiene la longitud de cada arreglo y
con los métodos Sort() y Reverse() de la clase Array se ordenan y se invierten los arreglos.

c) Ejecutar la aplicación: Al ejecutar el formulario Web arreglosunidimensionales.aspx,


y pulsar el botón Arreglos Unidimensionales, se podría visualizar una figura similar a
la siguiente:

3
Arrays y Colecciones

Figura 59. Ejecución formulario Web – arreglos unidimensionales.

Fuente: autor.

Arreglos de más de una dimensión.

Los arreglos pueden tener dos (2) o más dimensiones (llamadas matrices), lo que permitirá guardar
información del mismo tipo en filas y columnas y cada dimensión se debe especificar con una
coma dentro de los corchetes [ ]. Para identificar un elemento en particular se debe especificar el
número de la fila y él número de la columna. Por ejemplo, para declarar un arreglo de dos
dimensiones se debe escribir lo siguiente:

int[ , ] matriz;

Y para asignarle de espacio de almacenamiento, su formato es:

matriz= new int[2,5];


Para inicializar un arreglo de más de una dimensión se puede realizar de diversas formas:

- Inicializándolo directamente.

int[ , ] numeros = new int[30, 20] { {11, 12}, {23, 24}, {35, 36} };
string[ , ] nombres=new string[2, 2]{{"Cristian","Ana"}, {"Alberto","Maria"} };

- Omitiendo el tamaño del arreglo al inicializarlo.

int[ , ] numeros = new int[ , ] { {11, 12}, {23, 24}, {35, 36} };
string[ , ] nombres=new string[ , ]{{"Cristian","Ana"}, {"Alberto","Maria"} };

- Omitiendo el operador new para inicializarlo:

int[ , ] numeros = { {11, 12}, {23, 24}, {35, 36} };


string[ , ] nombres={{"Cristian","Ana"}, {"Alberto","Maria"} };

Ejemplo práctico arreglos bidimensionales.

 En el sitio Web ASP.NET llamado Arreglos_colecciones, adicionar un nuevo


formulario llamado arreglosbidimensionales.aspx, y diseñar un programa que
permita inicializar un arreglo bidimensional 4 x 2 con 8 nombres e imprimir dicho
arreglo utilizando las estructuras for y foreach, como también, imprimirlo como
4
Arrays y Colecciones

una matriz 4 x 2.

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 6 Label


(lbltitulo, lblfor, lblforeach, lbllongitud, lblimpreso, lblmatriz), 3 TextBox (txtfor,
txtforeach, txtlongitud) y 1 Button (botón). La interfaz se deberá visualizar como se
aprecia en la siguiente figura:

Figura 60. Formulario Web – arreglos bidimensionales.

Fuente: autor.

b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

string[,] nombres ={ {"Yezid","Boris"},


{"Gabriel","Patricia"},
{"Marcos","Adriana"},
{"Eduardo","Luisa"} };
int i;
for (i = 0; i < 4; i++)
for (int j = 0; j < 2; j++)
txtfor.Text = txtfor.Text + nombres[i, j] + ",";
foreach (String palabra in nombres)
txtforeach.Text = txtforeach.Text + palabra + ",";
txtlongitud.Text = "" + nombres.Length;
String tabla = "<table border=1>";
for (i = 0; i < 4; i++)
{
tabla += "<tr>";
for (int j = 0; j < 2; j++)
tabla += "<td>" + nombres[i, j] + "</td>";
tabla += "</tr>";
}
tabla += "</table>";
lbltabla.Text = tabla;

Inicialmente se define un arreglo bidimensional de 4 filas por 2 columnas, llamado


nombres al cual se le asignan 8 nombres.
Se utiliza dos estructuras for para imprimir el arreglo bidimensional, el primero recorre las
filas y el segundo recorre las columnas y una estructura foreach para imprimir el arreglo
bidimensional.
Para imprimir el arreglo bidimensional como una matriz de 4 x 2 se utiliza la etiqueta
<table> con la propiedad border de HTML, la cual se le asigna a la variable tabla de tipo
5
Arrays y Colecciones

String. En cada iteración del primer ciclo for a la variable tabla se le adiciona una etiqueta
<tr> para crear una fila y cuando se realiza una iteración en el segundo ciclo for, a la
variable tabla se le adiciona una etiqueta <td> para crear una columna, más el contenido
del arreglo en la posición [i,j], además el cierre de la columna con la etiqueta </td>. Al
salir nuevamente al primer ciclo for se le adiciona a tabla el cierre de la fila con la etiqueta
</tr>.
Al salir de los ciclos for a la variable tabla se le adiciona el cierre de la tabla con </table>
y se le asigna al control lbltabla en su propiedad Text el contenido de dicha variable.

c) Ejecutar la aplicación: Al ejecutar el formulario Web arreglosbidimensionales.aspx, y pulsar


el botón Arreglos Bidimensionales, se visualizará una figura similar a la siguiente:

Figura 61. Ejecución formulario Web – arreglos bidimensionales.

Fuente: autor.

Colecciones.

Una de las limitaciones de un arreglo unidimensional o de más dimensiones es que una


vez que se ha creado el arreglo, su tamaño no se puede variar porque es constante,
mientras las colecciones son grupos de objetos de tamaño dinámico, es decir, se pueden
añadir o eliminar objetos sin necesidad de volverlos a crear.
En general, una colección se utiliza para trabajar con listas o conjuntos ordenados de
objetos. Esta funcionalidad proviene de la implementación de una serie de clases e
interfaces del espacio de nombres (namespace) System.Collections, las cuales permiten
definir listas, colas, tablas hash y diccionarios. Las colecciones proporcionan métodos
básicos para acceder a los elementos de la colección utilizando corchetes, de manera
idéntica a como se accede a los elementos de un arreglo. Las interfaces que proporcionan
funcionalidad a las colecciones, son los siguientes:

Interface Descripción
IEnumerable Proporciona la capacidad para recorrer una colección a
través de sus elementos, por medio de una sentencia foreach.
ICollection Proporciona la capacidad para obtener el número de
elementos de la colección y de copiar elementos a un simple
arreglo.
IList Proporciona una lista de los elementos de la colección con
6
Arrays y Colecciones

las capacidades de los interfaces anteriormente citados y


algunas otras capacidades básicas.
IDictionary Proporciona una lista de elementos de la colección accesibles
a través de un valor en lugar de un índice.

Clase ArrayList.

Una de las clases más importantes que proporciona el namespace Systems.Collections se


denomina System.Collections.ArrayList, que implementa las interfaces IList, ICollection e
IEnumerable. Se puede utilizarse para representar una lista de elementos con un tamaño variable,
es decir es un arreglo cuyo tamaño puede cambiar dinámicamente cuando sea necesario. Algunos
de los métodos más importantes son los siguientes:
 Capacity: determina o lee el número de elementos del ArrayList.
 Count: obtiene el número actual de elementos del ArrayList.
 Item( ): obtiene o fija el elemento correspondiente a su índice determinado.
 Add( ): adiciona elementos al ArrayList.
 AddRauge ( ): permite añadir los elementos de una ICollection al final del
ArrayList.
 Clear ( ): elimina todos los elementos del ArrayList.
 Contains ( ): determina si un elemento está en el ArrayList.
 IndexOf ( ): devuelve el índice de un determinado elemento.
 Insert ( ): inserta un elemento en un ArrayList.
 InsertRange( ): inserta elementos de una colección en un ArrayList.
 Remove: elimina un determinado elemento.
 RemoveAt: elimina un determinado elemento accediendo a él a través de su
índice.
 Sort( ): ordena un ArrayList.
 ToArray( ): copia los elementos del ArrayList a un arreglo.

Ejemplo práctico clase ArrayList.

 En el sitio Web ASP.NET llamado Arreglos_Colecciones, adicionar un nuevo


formulario llamado coleccionArrayList.aspx, y elaborar un programa que permita
capturar 10 números en un arreglo, e imprimir los valores capturados.

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 4 Label


(lbltitulo, lblnumeros, lbltexto, lblcapturados), 2 TextBox (txtnumeros, txtcapturados)
y 1 Button (botón). La interfaz se deberá visualizar como se aprecia en la siguiente
figura:

Figura 62. Formulario Web – clase ArrayList.

7
Arrays y Colecciones

Fuente: autor.
b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

OBSERVACIÓN: sí al utilizar alguna clase de .NET, esta aparece con error, es necesario
importar el espacio de nombres respectivo. Para este ejemplo, el error se muestra al crear
la instancia de la clase ArrayList, acérquese con el cursor del mouse sobre el error para
visualizar un cuadro de dialogo, de click sobre la flecha y seleccione using
System.Collections; o using system.Collections.ArrayList;

public partial class ColeccionArrayList : System.Web.UI.Page


{
public static ArrayList valores = new ArrayList();
public static int i = 0;
protected void Page_Load(object sender, EventArgs e) {

}
protected void boton1_Click(object sender, EventArgs e) {
int numero;
if (int.TryParse(txtnumero.Text, out numero)) {
ColeccionArrayList.valores.Add(numero);
lbltexto.Text = "se guardó en la posición:" + ColeccionArrayList.i;
ColeccionArrayList.i = ColeccionArrayList.i + 1;
}
txtnumero.Text = "";
txtnumero.Focus();
if (ColeccionArrayList.i >= 10)
{
txtnumero.Enabled = false;
foreach (int dato in ColeccionArrayList.valores)
txtcapturados.Text = txtcapturados.Text + dato + "\n";
}
}
}
Inicialmente se definen dos variables estáticas: valores de tipo ArrayList e i de tipo int inicializada
en cero.
En el evento click de botón se define una variable entera llama numero. Con una
estructura if se evalúa sí lo digitado es un número por intermedio de la función
int.TryParse(). Si la condición es verdadera, se adiciona al ArrayList valores el valor
digitado, además, se imprime la posición donde se guardó y se incrementa el valor de i en
1. Obsérvese que se utiliza el nombre de la clase para ir actualizando en el servidor los
valores de los objetos valores e i. Cada vez que se digita un valor y se pulsa el botón el
objeto txtnumeros se limpia y el cursor se posiciona en dicho objeto.
Con otra estructura if se evalúa si el valor de i es i es mayor o igual que 10. Si la condición
se cumple, se deshabilita el objeto txtnumeros (enabled=false) y con un foreach se
imprime los datos capturados en el objeto valores.

c) Ejecutar la aplicación: al ejecutar el formulario Web coleccionArrayList.aspx, digitar


12 y pulsar el botón Adicionar, luego con el mismo proceso digitar 18, 24, 78, 32, 69,
52, 14, 10, 13. Se visualizaría una figura similar a la siguiente:

8
Arrays y Colecciones

Figura 63. Ejecución formulario Web – clase ArrayList.

Fuente: autor.

Clase Queue.

La colección Queue (cola) es útil cuando se requiere un acceso aleatorio a los datos o cuando se
quiere un orden determinado por el momento en que los elementos fueron adicionados a la
colección. Cada nuevo elemento se adicionar al principio de la colección y únicamente se puede
eliminar el último elemento. Esta colección se conoce como FIFO (primero en entrar – primero en
salir - First Input First Output). Los métodos más importantes son:

 Count: obtiene el número actual de elementos de la Queue.


 Clear ( ): elimina todos los elementos de la Queue.
 Enqueue( ): adiciona un elemento al final de la Queue.
 Dequeue ( ): elimina un elemento de la Queue.
 Contains ( ): determina si un elemento está en la Queue.
 Peek ( ): retorna el primer elemento sin eliminarlo.
 CopyTo( ): copia un rango de elementos a un arreglo existente.
 ToArray( ): copia los elementos de la Queue a un nuevo arreglo.

Ejemplo práctico clase Queue.

 En el sitio Web ASP.NET llamado Arreglos_Colecciones, adicionar un nuevo


formulario llamado coleccionQueue.aspx, e implementar un programa que permita
capturar N elementos en una Queue, e imprimir los elementos capturados, además,
la cantidad de elementos, el primer elemento y la eliminación del último elemento.

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 6 Label


(lbltitulo, lblelemento, lbllista, lbltotal, lblpeek, lbldequeue), 4 TextBox (txtelemento,
txtlista, txtpeek, txtdequeue) y 3 Button (btnadicionar, btnpeek, btndequeue). La
interfaz se deberá visualizar como se aprecia en la siguiente figura:

9
Arrays y Colecciones

Figura 64. Formulario Web – clase Queue.

Fuente: autor.

b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

OBSERVACIÓN: sí se muestra error al crear la instancia de la clase Queue, acérquese con


el cursor del mouse sobre el error para visualizar un cuadro de dialogo, de click sobre la
flecha y seleccione using System.Collections; o using system.Collections.Queue;
public partial class ColeccionQueue : System.Web.UI.Page
{
public static Queue cola = new Queue();
protected void Page_Load(object sender, EventArgs e) {

}
protected void btnadicionar_Click(object sender, EventArgs e) {
txtlista.Text = "";
object elemento = txtelemento.Text;
cola.Enqueue(elemento);
foreach(string valor in cola)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = cola.Count.ToString();
}
protected void btnpeek_Click(object sender, EventArgs e) {
txtlista.Text = "";
txtpeek.Text=cola.Peek().ToString();
foreach (Object valor in cola)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = cola.Count.ToString();
}
protected void btndequeue_Click(object sender, EventArgs e) {
txtlista.Text = "";
cola.Dequeue();
txtdequeue.Text = cola.Peek().ToString();
foreach (Object valor in cola)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = cola.Count.ToString();
}
}

Inicialmente se define una instancia global, publica y estática de la clase Queue llamada
cola. Luego se escribe el código para los tres controles Button en su respectivo evento
Click.
10
Arrays y Colecciones

 Btnadicionar: primeramente, se le asigna un espacio en blanco al control txtlista


en su propiedad Text, luego se define una variable llamada elemento de tipo Object
a la cual se le asigna el contenido del control txtelemento y utilizando el método
Enqueue se adiciona dicho elemento a la Queue, después con un ciclo foreach se
imprimen cada uno de los elementos de la Queue, los cuales son adicionados al
control txtlista. Por último, se le asigna la cantidad de elementos de la Queue al
objeto txttotal por intermedio del método Count().
 Btnpeek: primero, se le asigna un espacio en blanco al control txtlista en su
propiedad Text, luego se le asigna al objeto txtpeek lo que retorne el método Peek
(primer elemento de la Queue), después con un ciclo foreach se imprimen cada
uno de los elementos de la Queue, los cuales son adicionados al control txtlista.
Por último, se le asigna la cantidad de elementos de la Queue al objeto txttotal por
intermedio del método Count().
 Btndequeue: inicialmente se le asigna un espacio en blanco al control txtlista en su
propiedad Text, luego se ejecuta el método Dequeue (elimina un elemento de la
Queue), además, se le asigna al objeto txtdequeue lo que retorne el método Peek
(primer elemento de la Queue), después con un ciclo foreach se imprimen cada
uno de los elementos de la Queue, los cuales son adicionados al control txtlista.
Por último, se le asigna la cantidad de elementos de la Queue al objeto txttotal por
intermedio del método Count().

c) Ejecutar la aplicación: al ejecutar el formulario Web coleccionQueue.aspx, digitar


carlos y pulsar el botón Adicionar, luego con el mismo proceso digitar jose, claudia,
martha. Se visualizaría una figura similar a la siguiente:
Figura 65. Ejecución formulario Web – clase Queue.

Fuente: autor.

Al pulsar el botón Ejecutar un Peek, se observará la siguiente figura:

11
Arrays y Colecciones

Figura 66. Formulario Web – clase Queue, al ejecutar un Peek.

Fuente: autor.

Al pulsar el botón Ejecutar un Enqueue, se mostrará la siguiente figura:

Figura 67. Formulario Web – clase Queue, al ejecutar un Dequeue.

Fuente: autor.

Clase Stack.

La colección Stack (pila) adiciona un nuevo elemento al final de esta y únicamente se puede
eliminar el último elemento. Esta colección se conoce como LIFO (último en entrar – primero en
salir - Last Input First Output). Los métodos más importantes son:

 Count: obtiene el número actual de elementos de la Stack.


 Clear ( ): elimina todos los elementos de la Stack.
 Push( ): adiciona un elemento al final de la Stack.
 Pop ( ): elimina un elemento del Stack.
 Contains ( ): determina si un elemento está en la Stack.
 Peek ( ): retorna el primer elemento sin eliminarlo.
 CopyTo( ): copia un rango de elementos a un arreglo existente.
 ToArray( ): copia los elementos de la Stack a un nuevo arreglo.

Ejemplo práctico clase Stack.

 En el sitio Web ASP.NET llamado Arreglos_Colecciones, adicionar un nuevo


formulario llamado coleccionStack.aspx, y diseñar un programa que permita
capturar N elementos en una Stack, e imprimir los elementos capturados, además,
la cantidad de elementos, el primer elemento y la eliminación del último elemento.
12
Arrays y Colecciones

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 6 Label


(lbltitulo, lblelemento, lbllista, lbltotal, lblpeek, lblpop), 4 TextBox (txtelemento,
txtlista, txtpeek, txtpop) y 3 Button (btnadicionar, btnpeek, btnpop). La interfaz se
deberá visualizar como se aprecia en la siguiente figura:

Figura 68. Formulario Web – clase Stack.

Fuente: autor.

b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

OBSERVACIÓN: sí se muestra error al crear la instancia de la clase Stack, acérquese con


el cursor del mouse sobre el error para visualizar un cuadro de dialogo, de click sobre la
flecha y seleccione using System.Collections; o using system.Collections.Stack;

public partial class ColeccionStack : System.Web.UI.Page


{
public static Stack pila = new Stack();
protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnadicionar_Click(object sender, EventArgs e) {
txtlista.Text = "";
object elemento = txtelemento.Text;
pila.Push(elemento);
foreach (string valor in pila)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = pila.Count.ToString();
}
protected void btnpeek_Click(object sender, EventArgs e)
{
txtlista.Text = "";
txtpeek.Text = pila.Peek().ToString();
foreach (Object valor in pila)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = pila.Count.ToString();
}
protected void btnpop_Click(object sender, EventArgs e)
{
txtlista.Text = "";
13
Arrays y Colecciones

pila.Pop();
txtpop.Text = pila.Peek().ToString();
foreach (Object valor in pila)
txtlista.Text = txtlista.Text + valor + "\n";
txttotal.Text = pila.Count.ToString();
}
}

Inicialmente se define una instancia global, publica y estática de la clase Stack llamada
pila. Luego se escribe el código para los tres controles Button en su respectivo evento
Click.
 Btnadicionar: primeramente, se le asigna un espacio en blanco al control txtlista
en su propiedad Text, luego se define una variable llamada elemento de tipo Object
a la cual se le asigna el contenido del control txtelemento y utilizando el método
Push se adiciona dicho elemento a la Stack, después con un ciclo foreach se
imprimen cada uno de los elementos de la Stack, los cuales son adicionados al
control txtlista. Por último, se le asigna la cantidad de elementos de la Stack al
objeto txttotal por intermedio del método Count().
 Btnpeek: primero, se le asigna un espacio en blanco al control txtlista en su
propiedad Text, luego se le asigna al objeto txtpeek lo que retorne el método Peek
(primer elemento de la Stack), después con un ciclo foreach se imprimen cada uno
de los elementos de la Stack, los cuales son adicionados al control txtlista. Por
último, se le asigna la cantidad de elementos de la Stack al objeto txttotal por
intermedio del método Count().
 Btnpop: inicialmente se le asigna un espacio en blanco al control txtlista en su
propiedad Text, luego se ejecuta el método Pop (elimina un elemento de la Stack),
además, se le asigna al objeto txtpop lo que retorne el método Peek (primer
elemento de la Stack), después con un ciclo foreach se imprimen cada uno de los
elementos de la Stack, los cuales son adicionados al control txtlista. Por último, se
le asigna la cantidad de elementos de la Stack al objeto txttotal por intermedio del
método Count().

c) Ejecutar la aplicación: al ejecutar el formulario Web coleccionStack.aspx, digitar 12 y


pulsar el botón Adicionar, luego con el mismo proceso digitar 14, 20, 50. Se
visualizaría una figura similar a la siguiente:
Figura 69. Ejecución formulario Web – clase Stack.

Fuente: autor.

14
Arrays y Colecciones

Al pulsar el botón Ejecutar un Peek, se observará la siguiente figura:

Figura 70. Formulario Web – clase Stack, al ejecutar un Peek.

Fuente: autor.

Al pulsar el botón Ejecutar un Pop, se mostrará la siguiente figura:

Figura 71. Formulario Web – clase Stack, al ejecutar un Pop.

Fuente: autor.

Clase Hashtable.

Un Hashtable (tabla) es una colección que permite almacenar pares de objetos


(llave/valor), donde llave (key) es el primer objeto y valor (value) el segundo objeto. En
este tipo de colección siempre se deben adicionar los dos objetos. Por otro lado, no pueden
existir dos llaves iguales en un Hashtable, porque la llave debe ser única para poder
realizar la búsqueda de los objetos.

Los métodos más importantes son:

 Count: obtiene el número actual de elementos de la Hashtable.


 Clear ( ): elimina todos los elementos de la Hashtable.
 Add( ): adiciona una llave y un valor especificado al Hashtable.
15
Arrays y Colecciones

 Key ( ): devuelve las llaves del Hashtable.


 Value ( ): devuelve los valores del Hashtable.
 Containskey ( ): determina si existe una llave especifica en la Hashtable.
 ConstaninsValue ( ): determina si existe un valor específico en la Hashtable.
 CopyTo( ): copia un rango de elementos a un arreglo existente.
 Remove( ): elimina una entrada con la llave especificada de la Hashtable.

Ejemplo práctico clase Hashtable.

 En el sitio Web ASP.NET llamado Arreglos_Colecciones, adicionar un nuevo


formulario llamado coleccionHashtable.aspx, y elaborar un programa que permita
capturar N departamentos y su respectiva capital en un Hashtable, e imprimir los
departamentos y capitales capturados, además, la cantidad de departamentos. Por
otro lado, se debe poder realizar la búsqueda de la capital de un departamento.

a) Interfaz gráfica: el formulario Web contendrá los siguientes controles: 7 Label


(lbltitulo, lbldepartamento, lblcapital, lbllista, lbltotal, lblbuscarcapital,
lblcapitalencontrada), 6 TextBox (txtdepartamento, txtcapital, txtlista, txttotal,
txtbuscarcapital, txtcapitalencontrada) y 2 Button (btnadicionar, btnbuscar). La
interfaz se deberá visualizar como se aprecia en la siguiente figura:

Figura 72. Formulario Web – clase Hashtable.

Fuente: autor.

b) Codificación: dé doble clic sobre el botón para abrir el editor de código boton_Click y
escriba el siguiente código:

OBSERVACIÓN: sí se muestra error al crear la instancia de la clase Hashtable, acérquese


con el cursor del mouse sobre el error para visualizar un cuadro de dialogo, de click sobre
la flecha y seleccione using System.Collections; o using system.Collections.Hashtable;

public partial class ColeccionHashTable : System.Web.UI.Page


{
public static Hashtable informacion = new Hashtable();
protected void Page_Load(object sender, EventArgs e)
{

}
16
Arrays y Colecciones

protected void btnadicionar_Click(object sender, EventArgs e) {


txtlista.Text = "";
object departamento = txtdepartamento.Text;
object capital = txtcapital.Text;
informacion.Add(departamento,capital);
foreach (DictionaryEntry tabla in informacion)
txtlista.Text = txtlista.Text + tabla.Key + "->"+tabla.Value+"\n";
txttotal.Text = informacion.Count.ToString();
}
protected void btnbuscar_Click(object sender, EventArgs e) {
try {
Object buscador = informacion[txtbuscarcapital.Text].ToString();
txtcapitalencontrada.Text = buscador.ToString();
}
catch (NullReferenceException ex) {
txtcapitalencontrada.Text = "Capital no existe";
}
}
}

Inicialmente se define una instancia global, publica y estática de la clase Hashtable


llamada informacion. Luego se escribe el código para los dos controles Button en su
respectivo evento Click.
 Btnadicionar: primeramente, se le asigna un espacio en blanco al control txtlista
en su propiedad Text, luego se definen dos variables de tipo Object: departamento
a la cual se le asigna el contenido del control txtdepartamento y capital a la cual se
le asigna el contenido del control txtcapital, y utilizando el método Add se adiciona
dichos objetos a la Hashtable, después con un ciclo foreach (en cada iteración de
esta instrucción, se debe operar con un objeto de tipo DictionaryEntry que
contendrá un par llave/valor.) se imprimen cada uno de los pares de objetos
(key/value) de la Hashtable, los cuales son adicionados al control txtlista. Por
último se le asigna la cantidad de grupos de objetos de la Hashtable al objeto
txttotal por intermedio del método Count().
 Btnbuscar: inicialmente se define una estructura try/catch. Por el bloque try
(lanzar), se crea una variable de tipo Object llamada buscador a la cual se le
asigna el valor que contenga el objeto información según el contenido del objeto
txtbuscarcapital y dicha variable es asignada al objeto txtcapitalencontrada. Por el
bloque catch (atrapar) se captura la excepción NullReferenceEcception cuando se
trate de buscar una capital que no exista en el Hashtable.

c) Ejecutar la aplicación: al ejecutar el formulario Web coleccionHashtable.aspx, digitar


los pares (valle, cali) y pulsar el botón Adicionar, luego con el mismo proceso digitar
los pares (boyaca, tunja), (cundinamarca, bogota), (tolima, ibague). Se visualizaría
una figura similar a la siguiente:

17
Arrays y Colecciones

Figura 73. Ejecución formulario Web – clase Hashtable.

Fuente: autor.

Al digitar el departamento boyaca para buscar su capital en el Hashtable, al pulsar el botón


Buscar, se observará la siguiente figura:

Figura 74. Formulario Web – clase Hashtable, al ejecutar una búsqueda.

Fuente: autor.

Ejercicios propuestos.

1. Crear un sitio Web ASP.NET, que permita capturar en un vector 10 números e imprima
por medio de una función el vector ordenado.
2. Diseñar un sitio Web ASP.NET, que permita capturar en un vector 10 números e imprima
por medio de funciones el mayor, el menor y los números pares del vector.
3. Implementar un sitio Web ASP.NET, que emplee recursividad para calcular la suma de los
elementos de un vector.
4. Elaborar un sitio Web ASP.NET, que emplee recursividad para calcular el mayor de los
elementos de un vector.
5. Realizar un sitio Web ASP.NET, que solicite a un usuario 5 datos numéricos enteros, los
guarde en un array, luego solicite digitar un nuevo valor numérico entero e imprima el
valor mayor más cercano a él, o el texto Ninguno es mayor, si ninguno valor del array lo
es.

18
Arrays y Colecciones

6. Crea un sitio Web ASP.NET, que permita leer un arreglo de N elementos e


imprimir: el número de datos repetidos en el arreglo, el número de valores impares,
el número de valores pares, la cantidad de ceros.
7. Diseñar un sitio Web ASP.NET, que permita capturar dos arreglos A y B e
imprimir la unión de A y B con los valores ordenados. Por unión se entiende que
son todos los valores distintos encontrados en A y B. Además, se debe imprimir
cada arreglo.
8. Implementar un sitio Web ASP.NET, que permita ingresar 5 nombres de operarios y sus
sueldos respectivos. Se debe imprimir el sueldo mayor y el nombre del operario.
9. Elaborar un sitio Web ASP.NET, que permita capturar un vector de N elementos e
imprimir el menor y la cantidad de veces que se repite dicho numero en el vector.
10. Diseñar un sitio Web ASP.NET, que permita capturar números enteros en una matriz 3x2,
e imprimir la sumatoria por filas y columnas.
11. Realizar un sitio Web ASP.NET, un programa que permita imprimir la siguiente serie:
1 0 1 0 1 0
1 0 1 0 1 0
1 0 1 0 1 0
1 0 1 0 1 0
1 0 1 0 1 0
1 0 1 0 1 0

12. Elaborar un sitio Web ASP.NET, que permita imprimir la siguiente serie:

1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1

19

También podría gustarte