Recolección de Datos
En el trabajo diario de los desarrolladores de software existe la necesidad de manejar mucha información y para cubrir esta necesidad .Net Framework provee una serie de clases especializadas para almacenar y recibir información. Este tipo de clases son conocidas como Colecciones.
Estas clases proveen soporte para manejar las pilas, colas, listas y tablas hash. La mayoría de las clases aplican las mismas interfaces, y estas interfaces pueden ser heredadas para crear nueva colección que se ajusten a las clases más especializadas y necesidades de almacenamiento de datos que se tenga.
Características de las Colecciones:
· Las Colecciones pertenecen al espacio de nombre System.Collections y las colecciones genéricas incluidas en el .NET Framework 2.0, están contenidas en System.Collections.Generic
· La mayoría de las colecciones implementan las interfaces ICollection, IEnumerable, IList, IDictionary and IDictionaryEnumerator y las colecciones genéricas implementan la interfaces genéricas correspondientes.
Las colecciones pueden ser accedidas por índices de la misma manera que se utilizan los arrays.
Lista[0]… Lista[1]…
Otras colecciones permiten que puedan ser accedidas por nombre de los elementos.
Lista[“Name”]… Lista[“Cliente”]…
Listados de Colecciones.
ArrayList
Lista Simple. AutoCrecimiento. Accedida por Indices.
SortedList
Coleccion ordenada accedida por Nombre.
Queue
Lista Fifo – Primero en Entrar Primero en Salir.
Stack
Lista Lifo. Ultimo en entrar Primero en salir.
Hashtable
Lista de tipo Name/Value que puede ser accedida por nombre e índice.
BitArray
Lista compacta de valores Boléanos.
StringCollection
Lista simple de Cadenas de Carecteres (String). Accedida por Indices.
StringDictionary
Lista de tipo Name/Value de objetos de tipo String. puede ser accedida por nombre e índice.
ListDictionary
Lista eficiente para manejar listas pequeñas de objetos.
HybridDictionary
Es una lista inteligente que utiliza ListDictionary cuando la lista es pequeña y se convierte a HashTable cuando la lista crece.
NameValueCollection
Lista de tipo Name/Value de objetos de tipo String. puede ser accedida por nombre e índice.
Utilizando La Clase ArrayList.La clase ArrayList es sencilla de usar. Es una lista no organizada de objetos de cualquier tipo.
Esta clase soporta 2 metodos de agregar objetos a la lista. A través de Add y AddRange.
Add: Permite Agregar un solo elemento a la lista. Se puede utilizar para agregar cualquier objeto .NET a la lista.
ArrayList ListaDeObjetos = new ArrayList(); //Creo una Lista de Tipo ArrayList
Persona Francis = new Persona(); //Creo un Objeto Persona
ListaDeObjetos.Add(Francis); // Agrego el objeto persona a la lista
ListaDeObjetos.Add(1); // Agrego un Entero.
ListaDeObjetos.Add("HOLA MUNDO"); //Agrego una Cadena de Carecteres.
ListaDeObjetos.Add(true); //Agrego un Boleano.
AddRange permite agregar mas de un elemento a la lista. Solo debemos declarar un arreglos de objectos o cualquier lista que implemente la collecion ICollection.
string[] Nombres = { "Evelin Guerra", "Lina Paola", "Camilo Nuñez" }; //Array de String
ListaDeObjetos.AddRange(Nombres);
Estos métodos permiten agregar elementos a la lista, pero los agregan al final de la lista. Si necesitamos incluir un elemento en una posición determinada debemos utilizar los métodos Insert e InsertRange.
ListaDeObjetos.Insert(1, "HOLA a Todos"); // Inserta un String en la posición 1(segundo lugar de la lista).
ListaDeObjetos.InsertRange(2, Nombres); // Inserta el array de string en la posicion 2(a partir del tercer Lugar.)
ArrayList permite organizar los elementos a través de su método Sort. Este método además tiene varias sobrecargas entre las cuales esta que recibe un objecto que implemente la interfaz IComparer para organizar los elementos en base a este.
ListaDeObjetos.Sort(); //Organiza los Elementos de menor a mayor
Para organizar elementos siguiendo algún criterio solo debemos crear el objeto que herede de IComparer:
(Tomado del Libro Self-Paced Training Kit 70-536)
public class DescendingComparer : IComparer
{
CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
public int Compare(object x, object y)
{
// Invertir la tendencia a la comparación de objetos
// Se obtiene comparación Inversa.
return _comparer.Compare(y, x);
}
}
Después de haber creado el objeto solo debemos invocar el método Sort pasando como parámetro este objeto de este tipo.
ListaDeObjetos.Sort(new DescendingComparer());
ANEXOS
Conociendo IList, IDictionary, ICollections,
Tomado de MSDN
IList (Interfaz)
http://msdn.microsoft.com/es-es/library/system.collections.ilist(VS.80).aspxIList es un descendiente de la interfaz
ICollection y es la interfaz base de todas las listas no genéricas. Las implementaciones de IList se dividen en tres categorías: sólo lectura, tamaño fijo y tamaño variable. Una interfaz IList de sólo lectura no se puede modificar. Una interfaz IList de tamaño fijo no permite agregar o eliminar elementos, pero sí modificar elementos existentes. Una interfaz IList de tamaño variable permite agregar, quitar y modificar elementos.
Representa una colección de objetos no genéricos a los que se puede obtener acceso por índice.
Para obtener la versión genérica de esta interfaz, vea
System.Collections.Generic.IList.
Propiedades públicas
Nombre
Descripción
IsFixedSizeObtiene un valor que indica si la interfaz IList tiene un tamaño fijo.
IsReadOnlyObtiene un valor que indica si la interfaz IList es de sólo lectura.
ItemObtiene o establece el elemento que se encuentra en el índice especificado.
Arriba Métodos públicos
Nombre
Descripción
AddAgrega un elemento a
IList.
ClearQuita todos los elementos de IList.
ContainsDetermina si IList contiene un valor específico.
IndexOfDetermina el índice de un elemento específico de IList.
InsertInserta un elemento en IList, en el índice especificado.
RemoveQuita la primera aparición de un objeto específico de IList.
RemoveAtQuita el elemento de IList en el índice especificado.
IDictionary (Interfaz)
http://msdn.microsoft.com/es-es/library/system.collections.idictionary_members(VS.80).aspxRepresenta una colección no genérica de pares de clave y valor.
Cada par debe tener una clave única. Las implementaciones pueden variar en si permiten que la clave sea referencia de objeto null (Nothing en Visual Basic). El valor puede ser referencia de objeto null (Nothing en Visual Basic) y no es necesario que sea único. La interfaz IDictionary permite enumerar las claves y valores incluidos, pero esto no implica un criterio de ordenación determinado.
Las implementaciones de IDictionary se dividen en tres categorías: de sólo lectura, de tamaño fijo y de tamaño variable. Un objeto IDictionary de sólo lectura no se puede modificar. En un objeto IDictionary de tamaño fijo no se pueden agregar ni quitar elementos, pero sí modificar los existentes. Un objeto IDictionary de tamaño variable permite agregar, quitar y modificar elementos.
La instrucción foreach del lenguaje C# (for each en Visual Basic) requiere el tipo de cada elemento de la colección. Como los elementos del objeto IDictionary son pares de clave y valor, el tipo del elemento no se corresponde con el tipo de la clave ni con el del valor. En su lugar, el tipo del elemento es DictionaryEntry. Por ejemplo:
Propiedades públicas
Nombre
Descripción
IsFixedSizeObtiene un valor que indica si el objeto IDictionary tiene un tamaño fijo.
IsReadOnlyObtiene un valor que indica si el objeto IDictionary es de sólo lectura.
ItemObtiene o establece el elemento con la clave especificada.
KeysObtiene un objeto
ICollection que contiene las claves del objeto IDictionary.
ValuesObtiene un objeto ICollection que contiene los valores del objeto IDictionary.
Métodos públicos
Nombre
Descripción
AddAgrega un elemento con la clave y el valor proporcionados al objeto
IDictionary.
ClearQuita todos los elementos del objeto IDictionary.
ContainsDetermina si el objeto IDictionary contiene un elemento con la clave especificada.
GetEnumeratorDevuelve un objeto
IDictionaryEnumerator para el objeto IDictionary.
RemoveQuita el elemento con la clave especificada del objeto IDictionary.
ICollection (Interfaz)
http://msdn.microsoft.com/es-es/library/system.collections.icollection(VS.80).aspxDefine el tamaño, los enumeradores y los métodos de sincronización para todas las colecciones no genéricas.
La interfaz ICollection es la interfaz base para las clases del espacio de nombres
System.Collections.
La interfaz ICollection amplía
IEnumerable;
IDictionary e
IList son interfaces más especializadas que amplían la interfaz ICollection. Una implementación de IDictionary es una colección de pares de clave y valor, como la clase
Hashtable. Una implementación de IList es una colección de valores y el índice, como la clase
ArrayList, puede obtener acceso a sus miembros.
Algunas colecciones que limitan el acceso a sus elementos, como la clase
Queue y la clase
Stack, implementan directamente la interfaz ICollection.
En caso de que ni la interfaz IDictionary ni la interfaz IList cumplan los requisitos de la colección requerida, la nueva clase de colección se deriva de la interfaz ICollection para una mayor flexibilidad.
Para obtener la versión genérica de esta interfaz, vea
System.Collections.Generic.ICollection.
Las siguientes tablas recogen los miembros expuestos por el tipo
ICollection .
Propiedades públicas
Nombre
Descripción
CountObtiene el número de elementos incluidos en ICollection.
IsSynchronizedObtiene un valor que indica si el acceso a ICollection está sincronizado (es seguro para la ejecución de subprocesos).
SyncRootObtiene un objeto que se puede utilizar para sincronizar el acceso a ICollection.
Métodos públicos
Nombre
Descripción
CopyToCopia los elementos de la interfaz
ICollection en un objeto
Array, a partir de un índice determinado de la clase Array.