Tutorial de C# Arreglos y Colecciones. Por: Óscar López, M.Sc. olopez@uniandino.com.co



Documentos relacionados
Estructuras de datos. Colecciones en C#. Arreglos, Listas, Pilas, Colas y Árboles Métodos de búsqueda y ordenamiento

Modulo 1 El lenguaje Java

Introducción a la programación orientada a objetos

AGRUPA P R OBJET E OS 1

Tema 2. El lenguaje de programación Java. Arrays y cadenas

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

Introducción al tipo de dato ARRAY

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Colecciones de Java LSUB. 17 de febrero de 2016 GSYC

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Colecciones. Nadjet Bouayad-Agha Programación 2007

Generics y Visual Basic.NET

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Práctica sobre compartición de instancias remotas.

Programación Orientada a Objetos en Java

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Pruebas de unidad con JUnit

Programación de Objetos.Net C# LDP / DUOC-AV. Manejo de Colecciones y Listas... 1 Colecciones ArrayList y List... 1

Curso de Java POO: Programación orientada a objetos

Prácticas de Programación

Ejercicio 1 (3 puntos).-

Arrays y Cadenas en C

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Introducción al lenguaje JAVA

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

José Antonio González Seco Página 1 TEMA 2: COLECCIONES 2

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INSTITUTO POLITECNICO NACIONAL. ESCUELA SUPEIRIOR DE INGENIERIA MECANICA Y ELECTRICA. UNIDAD CULHUACAN. INTEGRANTES: FLORES ACOLTZI ONESIMO

Programación Orientada a Objetos con Java

Tutorial básico del entorno de desarrollo Eclipse.

FIUBA Algoritmos y programación 3

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Tema: Arreglos de Objetos en C++.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Patrones de diseño. Patrón básico Handler. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Definición de clases: Herencia, polimorfismo, ligadura dinámica

11. Algunas clases estándar de Java (II)

Tema: Clases y Objetos en C++.

UNIVERSIDAD NACIONAL DE INGENIERÍA CENTRO DE EXTENSIÓN Y PROYECCIÓN SOCIAL

Clase adicional 3. Métodos. Temas

Clases y Objetos. Informática II Ingeniería Electrónica

Benemérita Universidad Autónoma del Estado de Puebla

Tema 2. El lenguaje de programación Java (Parte 1)

promedio = nint((notas(1) + notas(2) + notas(3) + & notas(4) + notas(5) + notas(6)) / 6.0) print *, 'Su promedio es', promedio

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Herencia e Interfaces

Computación III. Objetivo de aprendizaje del tema

9. Objetos y clases Clases

Java Inicial (20 horas)

Patrones para persistencia (I) Ingeniería del Software II

Prof. Dr. Paul Bustamante

Programación orientada a objetos

Factory method (Gamma et al.)

Tema: Sobrecarga de Operadores.

Kaldeera Advanced Forms 2009 Guía del usuario

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

GESTIÓN DE REDES PARTE III

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Universidad de Cantabria

Vectores y matrices. Arrays Declaración Creación Acceso a los elementos de un array Manipulación de vectores y matrices

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

2.2.- Paradigmas de la POO

Capítulo 6. Introducción a la POO

Objetos y Clases en Java. ELO 329: Diseño y Programación Orientados a Objetos

CAPÍTULO 6 COMPOSICIÓN Y AGREGACIÓN

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

8. Sentencia return y métodos

Preliminares. Tipos de variables y Expresiones

Constructores y Destructores

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

El lenguaje de programación Java

Resumen Lenguaje Java

Base de datos relacional

APUNTES JAVA ARRAYS (ARREGLOS) Un arreglo es un grupo de posiciones de memoria contiguas. Todas las cuales tienen el mismo nombre y el mismo tipo.

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Programación Orientada a Objetos: Arreglos en Java

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Taller de Programación I. Tema 04: Arreglos y Matrices en Java

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Segundo Taller Final de PROGRAMACIÓN ORIENTADO A OBJETOS. INGENIERÍA DE SISTEMAS. Docente y Administrativo: Luz Esperanza Espitia Preciado

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

Tablas internas 1-12

Práctica 2 Gráficos Vectoriales con SVG (versión )

public static void main(string[ ] args) { Numero f1 = new Numero(3); Numero f2 = new Numero(4); Numero f3 = f1; f1.value = f2.value; Numero f4 = null;

Árboles binarios de búsqueda

Curso de Python Inicial

Elementos léxicos del lenguaje de programación Java

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

Estructura de datos tipo vector.

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 8. Elementos Básicos

Transcripción:

Tutorial de C# Arreglos y Colecciones Por: Óscar López, M.Sc. olopez@uniandino.com.co

ARREGLOS

Arreglos Un arreglo es el tipo de colección más simple, soportado directamente por el lenguaje Se trata de un secuencia de objetos del mismo tipo que pueden ser accedidos por medio de un índice Cuando se declara un arreglo, realmente se está instanciando un objeto de una sub-clase de System.Array, que implementa ICloneable, IList, Icollection e IEnumerable Se cuenta con Lo mejor de dos mundos: una sintaxis familiar para declarar arreglos y la definición de una clase que brinda acceso a un conjunto de métodos y propiedades comunes a todos los arreglos Se pueden efectuar conversiones de tipo entre arreglos, siempre que sus dimensiones sean iguales y sea posible convertir (implícita o explícitamente) entre los tipos de sus elementos

Arreglos - Declaración [[atributos]] [modificadores] tipo[] nombre; Los [] indican al compilador que se está declarando un arreglo, y se los conoce como el operador índice. El tipo indica el tipo de elementos que puede contener el arreglo Se instancian usando la palabra clave new Los arreglos son tipos referencia y se crean en el heap. Los elementos del arreglo se crean en la pila o en el heap, según se traten de tipos valor o tipos referencia respectivamente

Arreglos - Inicialización y Acceso En el momento de instanciar un arreglo sus elementos quedan inicializados en los valores por defecto correspondientes a su tipo string[] miarreglo; miarreglo = new string[10]; Pueden ser inicializados explícitamente en el momento de su declaración: int[] miarreglo = new int[5] { 2, 4, 6, 8, 10 }; int[] miarreglo = { 2, 4, 6, 8, 10 }; El índice de los arreglos empieza en 0 y los elementos se acceden usando la sintaxis nombre[i], donde i es el elemento ubicado en la posición i+1 dentro del arreglo Si se trata de acceder un elemento por fuera del rango de un arreglo, la excepción IndexOutOfRangeException será lanzada

Clase System.Array Método o Propiedad IsFixedSize Length Rank Clear() Copy() IndexOf() LastIndexOf() Reverse() Sort() Descripción Propiedad que indica si el arreglo es de tamaño fijo Propiedad que retorna el tamaño del arreglo Propiedad que retorna el número de dimensiones del arreglo Establece el valor de un rango de elementos de un arreglo en 0 o null Copia una sección de un arreglo a otro arreglo Retorna el índice de la primera ocurrencia de un valor en un arreglo unidimensional Retorna el índice de la última ocurrencia de un valor en un arreglo unidimensional Invierte el orden de los elementos en un arreglo unidimensional Ordena los elementos (que deben implementar IComparable) de un arreglo unidimensional usando el algoritmo Quicksort

Array - Propiedad Length Indica cuántos objetos hay en un arreglo, retornando el tamaño total de éste En el caso de un arreglo multidimensional, retorna el tamaño total de todo el arreglo no el tamaño de su primer nivel 1. using System; 2. public class TestLength { 3. int[,] MyArray = new int[2,5]; 4. public static void Main() { 5. TestLength c = new TestLength(); 6. Console.WriteLine(c.MyArray.Length); 7. Console.WriteLine(c.MyArray.GetLength(0)); 8. Console.WriteLine(c.MyArray.GetLength(1)); 9. } 10. }

Array - Ejemplo 1. using System; 2. public class Tester { 3. static void Main() { 4. String[] myarray = {"Who", "is", "John", "Doe"}; 5. PrintMyArray(myArray); 6. Array.Reverse(myArray); 7. PrintMyArray(myArray); 8. String[] myotherarray = 9. {"We", "Hold", "These", "Truths", "To", "Be", "Self", "Evident"}; 10. PrintMyArray(myOtherArray); 11. Array.Sort(myOtherArray); 12. PrintMyArray(myOtherArray); 13. Console.ReadLine(); 14. } 15. public static void PrintMyArray(object[] thearray) { 16. foreach (object obj in thearray) 17. Console.WriteLine("Value: {0}", obj); 18. Console.WriteLine(); 19. } 20. }

Arreglos Multidimensionales

Arreglos Rectangulares [[atributos]] [modificadores] tipo[,] nombre; Un arreglo rectangular es un arreglo de dos o más dimensiones. En uno de dos dimensiones, la primera es el numero de filas y la segunda el número de columnas El número de, en la declaración indica el número de dimensiones del arreglo Los elementos se acceden usando la sintaxis nombre[i,j]

Arreglos Rectangulares - Ejemplo 1. using System; 2. class Tester { 3. public void Run() { 4. const int rows = 4; 5. const int columns = 3; 6. // declara un arreglo rectangular 4x3 de enteros 7. int[,] rectangulararray = { {0,1,2}, {3,4,5}, {6,7,8}, {9,10,11} }; 8. // imprime el contenido del arreglo 9. for (int i = 0; i < rows; i++) 10. for (int j = 0; j < columns; j++) 11. Console.WriteLine("[{0},{1}] = {2}", i, j, rectangulararray[i,j]); 12. } 13. static void Main() { 14. Tester t = new Tester(); 15. t.run(); 16. Console.ReadLine(); 17. } 18. }

Arreglos Serrados [[atributos]] [modificadores] tipo[][] nombre; Cada fila puede tener un número diferente de columnas Un arreglo serrado puede entenderse como un arreglo en donde cada uno de sus elementos es un arreglo Al momento de declararlos, se debe indicar el número de filas El número de [] en la declaración indica el número de dimensiones del arreglo También pueden inicializarse en la declaración: int[][] miarreglo = new int[2][] { new int[] {1,2,3}, new int[] {4,5,6,7,8} }; Los elementos se acceden usando la sintaxis nombre[i][j]

Arreglos Serrados - Ejemplo 1. using System; 2. class Tester { 3. public void Run() { 4. const int rows=4, rowzero=5, rowone=2, rowtwo=3, rowthree=5; 5. // declara un arreglo serrado de cuatro filas 6. int[][] jaggedarray = new int[rows][]; 7. // declara cada fila con tamaños distintos 8. jaggedarray[0] = new int[rowzero]; 9. jaggedarray[1] = new int[rowone]; 10. jaggedarray[2] = new int[rowtwo]; 11. jaggedarray[3] = new int[rowthree]; 12. // llena algunas (pero no todas las) posiciones 13. jaggedarray[0][3] = 15; 14. jaggedarray[1][1] = 12; 15. jaggedarray[2][1] = 9; 16. jaggedarray[2][2] = 99; 17. jaggedarray[3][0] = 10; 18. jaggedarray[3][1] = 11; 19. jaggedarray[3][2] = 12; 20. jaggedarray[3][3] = 13; 21. jaggedarray[3][4] = 14; 22. for(int i=0;i<rowzero;i++) Console.WriteLine("[0][{0}] = {1}",i,jaggedArray[0][i]); 23. for(int i=0;i<rowone;i++) Console.WriteLine("[1][{0}] = {1}",i,jaggedArray[1][i]); 24. for(int i=0;i<rowtwo;i++) Console.WriteLine("[2][{0}] = {1}",i,jaggedArray[2][i]); 25. for(int i=0;i<rowthree;i++) Console.WriteLine("[3][{0}] = {1}",i,jaggedArray[3][i]); 26. } 27. static void Main() { 28. new Tester().Run(); 29. Console.ReadLine(); 30. } 31. }

COLECCIONES

Colecciones Una colección es un contenedor que alberga un grupo de objetos El framework.net proporciona varias clases que implementan la funcionalidad de una colección Igualmente, proporciona un conjunto de interfaces estándar para enumerar, comparar y crear colecciones Se aconseja estudiar el espacio de nombres System.Collections para profundizar en el tema de las colecciones

Interfaces Útiles Interfaz ICollection Métodos int Count {get;} bool IsSynchronized {get;} object SyncRoot {get;} void CopyTo(Array array, int index) IComparer int Compare(object x, object y) IEnumerable IEnumerator IDictionaryEnumerator IHashCodeProvider IEnumerator GetEnumerator() object Current {get;} bool MoveNext() void Reset() DictionaryEntry Entry {get;} object Key {get;} object Value {get;} int GetHashCode(object obj)

Interfaces Útiles IList Interfaz IDictionary Métodos bool IsFixedSize {get;} bool IsReadOnly {get;} object this[int index] {get; set;} int Add(object value) void Clear() bool Contains(object value) int IndexOf(object value) void Insert(int index, object value) void Remove(object value) void RemoveAt(int index) bool IsFixedSize {get;} bool IsReadOnly {get;} object this[object key] {get; set;} ICollection Keys {get;} ICollection Values {get;} void Add(object key, object value) void Clear(); bool Contains(object key) IDictionaryEnumerator GetEnumerator(); void Remove(object key)

IComparer e IComparable La interfaz IComparer proporciona el método Compare() por medio del cual dos objetos cualquiera en una colección pueden ser ordenados Típicamente, IComparer es implementado en clases auxiliares, cuyas instancias son pasadas como parámetros a métodos como Array.Sort(Array a, IComparer c) El framework.net provee las clases Comparer y CaseInsensitiveComparer que implementan IComparer y permiten efectuar comparaciones de cadenas de caracteres - teniendo o no en cuenta mayúsculas/minúsculas, respectivamente- La interfaz IComparable es similar, pero define CompareTo() en el mismo objeto que va a ser comparado y no en una clase auxiliar La ventaja de tener una clase auxiliar implementando IComparer es que permite tener un mayor control sobre la forma en que se efectúa el ordenamiento. Por ej., es posible definir varios criterios distintos para ordenar una colección de objetos del mismo tipo

IEnumerable e IEnumerator Las instancias de colecciones que implementan IEnumerable pueden ser recorridas fácilmente usando foreach Además de una clase que implemente IEnumerable, se necesita otra clase auxiliar que implemente IEnumerator La responsabilidad del enumerador será la de proporcionar los métodos necesarios para recorrer una colección: Current, MoveNext() y Reset()

IEnumerable e IEnumerator - Ejemplo 1. using System; 2. using System.Collections; 3. class TestForeach { 4. static void Main() { 5. string s = "abc123"; 6. Console.WriteLine(s is IEnumerable + "\n"); 7. foreach (char c in s) Console.WriteLine(c); 8. Console.WriteLine("\n---\n"); 9. IEnumerator ie = s.getenumerator(); 10. while (ie.movenext()) { 11. char c = (char) ie.current; 12. Console.WriteLine(c); 13. } 14. Console.ReadLine(); 15. } 16. }

IDictionary e IDictionaryEnumerator Las clases que implementan IDictionary permiten representar una colección que asocia un valor a una determinada llave y se las conoce como Diccionarios Dichas clases también pueden ser enumeradas usando foreach, pero con una diferencia: el método GetEnumerator() retorna un objeto que implementa IDictionaryEnumerator Un Diccionario puede verse como un conjunto de objetos que encapsulan una pareja llave-valor Los objetos que implementen IDictionaryEnumerator son consistentes con esta idea: un diccionario es enumerado recorriendo instancias de la estructura DictionaryEntry, que encapsulan una llave y su respectivo valor

Clase System.Collections.ArrayList Método o Propiedad Capacity Count Item Add() Clear() GetEnumerator() Insert() RemoveAt() Reverse() Sort() ToArray() Descripción Propiedad que indica el número de elementos que actualmente puede contener el ArrayList Propiedad que retorna el número de elementos en la colección Indexador de la clase ArrayList Añade un objeto al final Remueve todos los elementos Retorna el enumerador Inserta un elemento en un índice dado Remueve un elemento de un índice dado Invierte el orden de los elementos Ordena los elementos usando Quicksort Copia todos los elementos a un nuevo arreglo

ArrayList - Ejemplo 1. using System; 2. using System.Collections; 3. public class Employee { 4. private int empid; 5. public Employee(int empid) { 6. this.empid = empid; 7. } 8. public override string ToString() { 9. return empid.tostring(); 10. } 11. } 12. public class Tester { 13. static void Main() { 14. ArrayList emparray = new ArrayList(); 15. ArrayList intarray = new ArrayList(); 16. // Llenamos los arreglos 17. for (int i = 0; i < 5; i++) emparray.add(new Employee(i+100)); 18. for (int i = 0; i < 17; i++) intarray.add(i); 19. // Imprimimos el contenido del ArrayList de enteros 20. for (int i = 0; i < intarray.count; i++) Console.Write("{0} ", intarray[i]); 21. Console.WriteLine("\n\nintArray.Capacity: {0}", intarray.capacity); 22. // Imprimimos el contenido del ArrayList de empleados 23. for (int i = 0; i < emparray.count; i++) Console.Write("{0} ", emparray[i]); 24. Console.WriteLine("\n\nempArray.Capacity: {0}", emparray.capacity); 25. Console.ReadLine(); 26. } 27. }

Clase System.Collections.Queue Método o Propiedad Count Clear() Contains() CopyTo() Dequeue() Enqueue() GetEnumerator() Peek() ToArray() Descripción Propiedad que retorna el número de elementos en la colección Remueve todos los elementos Determina si un elemento está en la cola Copia un rango de elementos a un arreglo ya existente Remueve y retorna el objeto al comienzo de la cola Añade un objeto al final de la cola Retorna el enumerador Retorna el objeto al comienzo de la cola sin removerlo Copia todos los elementos a un nuevo arreglo

Queue - Ejemplo 1. using System; 2. using System.Collections; 3. public class Tester { 4. static void Main() { 5. Queue intqueue = new Queue(); 6. // Pone elementos en la cola 7. for (int i = 0; i < 5; i++) intqueue.enqueue(i*5); 8. PrintValues(intQueue); 9. // Remueve un elemento de la cola 10. Console.WriteLine("\n(Dequeue)\t{0}", intqueue.dequeue()); 11. PrintValues(intQueue); 12. // Mira el primer elemento de la cola sin removerlo 13. Console.WriteLine("\n(Peek) \t{0}", intqueue.peek()); 14. PrintValues( intqueue ); 15. Console.ReadLine(); 16. } 17. public static void PrintValues(IEnumerable mycollection) { 18. Console.Write("intQueue values:\t"); 19. foreach (object o in mycollection) Console.Write("{0} ", o); 20. Console.WriteLine(); 21. } 22. }

Clase System.Collections.Stack Método o Propiedad Count Clear() Contains() CopyTo() GetEnumerator() Peek() Pop() Push() ToArray() Descripción Propiedad que retorna el número de elementos en la colección Remueve todos los elementos Determina si un elemento está en la pila Copia un rango de elementos a un arreglo ya existente Retorna el enumerador Retorna el objeto en la parte superior de la pila sin removerlo Remueve y retorna el objeto en la parte superior de la pila Añade un objeto en la parte superior de la pila Copia todos los elementos a un nuevo arreglo

Stack - Ejemplo 1. using System; 2. using System.Collections; 3. class Tester { 4. public static void Main() { 5. Stack intstack = new Stack(); 6. // Pone elementos en la pila 7. for (int i = 0; i < 8; i++) intstack.push(i*5); 8. PrintValues(intStack); 9. // Remueve un elemento de la pila 10. Console.WriteLine("\n(Pop)\t{0}", intstack.pop()); 11. PrintValues(intStack); 12. // Mira el primer elemento de la pila sin removerlo 13. Console.WriteLine("\n(Peek) \t{0}", intstack.peek()); 14. PrintValues(intStack); 15. Console.ReadLine(); 16. } 17. public static void PrintValues(IEnumerable mycollection) { 18. Console.Write("intStack values:\t"); 19. foreach (object o in mycollection) Console.Write("{0} ", o); 20. Console.WriteLine(); 21. } 22. }

Clase System.Collections.Hashtable Método o Propiedad Count Keys Values Item Add() Clear() ContainsKey() ContainsValue() CopyTo() GetEnumerator() Remove() Descripción Propiedad que retorna el número de elementos en la colección Retorna una ICollection con las llaves de la Hashtable Retorna una ICollection con los valores de la Hashtable Indexador de la clase Hashtable Añade una entrada con la llave y el valor especificados Remueve todos los elementos Determina si la Hashtable contiene una llave especificada Determina si la Hashtable contiene un valor especificado Copia un rango de elementos a un arreglo ya existente Retorna el enumerador Remueve una entrada con la llave especificada

Hashtable Un tipo de diccionario optimizado para recuperar rápidamente los valores Tanto llaves como valores pueden ser cualquier Object o tipo básico Por defecto, se usa el método GetHashCode() como función de hashing y el método Equals() para determinar si dos objetos son iguales, ambos heredados de Object También se puede implementar la interfaz IHashCodeProvider para definir una nueva función de hashing CaseInsensitiveHashCodeProvider implementa dicha interfaz para calcular un hash de cadenas de caracteres que no tenga en cuenta mayúsculas/minúsculas Recordar que se pueden probar distintos valores de capacidad y factor de carga para acomodar la Hashtable a la colección de elementos que se quieren almacenar y lograr un buen balance entre: minimizar colisiones, maximizar el uso eficiente de la memoria y acceder rápidamente los valores almacenados

Hashtable - Ejemplo 1. using System; 2. using System.Collections; 3. public class TestClass { 4. public static void Main() { 5. Hashtable ht = new Hashtable(); 6. // Usando Add() 7. ht.add("a", "apple"); ht.add("d", "durian"); 8. ht.add("b", "banana"); ht.add("c", "coconut"); 9. PrintCollection(ht); 10. // Usando la propiedad Count 11. Console.WriteLine("Count: {0}\n", ht.count); 12. // Usando ContainsKey() 13. Console.WriteLine(ht.ContainsKey("D")); 14. Console.WriteLine(ht.ContainsKey("S") + "\n"); 15. // Usando ContainsValue() 16. Console.WriteLine(ht.ContainsValue("banana")); 17. Console.WriteLine(ht.ContainsValue("starfruit") + "\n"); 18. // Usando Remove() 19. ht.remove("b"); 20. PrintCollection(ht); 21. // Usando la propiedad Keys 22. foreach (string key in ht.keys) Console.WriteLine(key); 23. // Usando la propiedad Values() 24. Console.WriteLine(); 25. foreach (string val in ht.values) Console.WriteLine(val); 26. Console.ReadLine(); 27. } 28. public static void PrintCollection(IEnumerable mycollection) { 29. foreach (DictionaryEntry de in mycollection) 30. Console.WriteLine("Key: {0} Value: {1}", de.key, de.value); 31. Console.WriteLine(); 32. } 33. }

Colecciones - Usos Avanzados Todas las clases que implementan ICollection tienen métodos para trabajar con versiones sincronizadas de éstas BitArray es una colección similar a ArrayList, diseñada para trabajar con bits representados como valores booleanos SortedList es un híbrido entre Hashtable y Array, almacena llaves-valores, pero sus llaves están ordenadas. Sus valores pueden recuperarse usando llaves o índices Estudiar el espacio de nombres System.Collections.Specialized. Cuenta con colecciones especializadas y optimizadas para trabajar con un tipo de datos determinado, por ej., cadenas de texto