Tutorial de colecciones de C# con ejemplos

⚡ Resumen inteligente

En C#, las colecciones ofrecen una forma flexible de almacenar y gestionar grupos de objetos. A diferencia de los arrays, las colecciones crecen y se reducen en tiempo de ejecución, y los espacios de nombres System.Collections y System.Collections.Generic proporcionan tipos predefinidos para listas, diccionarios, pilas y colas.

  • 🔃 Dimensionamiento dinámico: Las colecciones añaden y eliminan elementos en tiempo de ejecución, por lo que no es necesario fijar el tamaño de antemano como en el caso de un array.
  • 📚 Espacios de nombres: System.Collections almacena los tipos no genéricos, mientras que System.Collections.Generic almacena los tipos genéricos con seguridad de tipos.
  • 🧱 Clases básicas: ArrayList, Stack, Queue, Hashtable, SortedList y BitArray cubren las necesidades comunes no genéricas.
  • ✅ Potencia genérica: Las clases List, Dictionary, HashSet y Queue añaden seguridad de tipos en tiempo de compilación y un mejor rendimiento.
  • 🔑 Elección correcta: Utilice un diccionario para búsquedas clave, una lista para elementos ordenados y una pila o cola para el orden LIFO o FIFO.
  • 🤖 Asistencia de IA: GitHub Copilot genera el código de las colecciones, y las canalizaciones de ML.NET pasan los datos a través de tipos de colecciones genéricos.

Colecciones en C#

En nuestro tutorial anterior, aprendimos cómo podemos usar matrices en C#. Echemos un vistazo rápido. Las matrices en programación se utilizan para agrupar un conjunto de objetos relacionados. Por lo tanto, se podría crear una matriz o un conjunto de números enteros, a los que se podría acceder mediante un nombre de variable.

¿Qué son las colecciones en C#?

Las colecciones son similares a Matrices, proporciona una forma más flexible de trabajar con un grupo de objetos.

En las matrices, habrás notado que necesitas definir la cantidad de elementos en una matriz de antemano. Esto debía hacerse cuando se declaró la matriz.

Pero en una colección, no es necesario definir el tamaño de la colección de antemano. Puede agregar elementos o incluso eliminar elementos de la colección en cualquier momento. Este capítulo se centrará en cómo podemos trabajar con las diferentes colecciones disponibles en C#.

Clases System.Colecciones

El .NET Framework agrupa las clases de colección originales no genéricas dentro del espacio de nombres System.Collections. La siguiente tabla resume los tipos principales que puede usar de inmediato.

Colección Mareas Ideales para Lecciones
Lista de arreglo La colección ArrayList es similar a los Arrays. tipo de datos en C#. La mayor diferencia es la naturaleza dinámica de la colección de listas de matrices.
Apilar La pila es una colección de casos especiales que representa un concepto de último en entrar, primero en salir (LIFO).
colas La cola es una colección de casos especiales que representa un concepto de primero en entrar, primero en salir.
Tabla de picadillo Una tabla hash es una colección especial que se utiliza para almacenar elementos clave-valor.
ListaOrdenada SortedList es una colección que almacena pares clave-valor en orden ascendente de clave de forma predeterminada.
BitArray Una matriz de bits es una matriz de estructura de datos que almacena bits.

Colecciones genéricas en C#

Las clases no genéricas mencionadas anteriormente almacenan cada elemento como un objeto genérico, lo que significa que el compilador no puede verificar el tipo y el programa incurre en un pequeño costo al convertir los valores a un tipo específico. Para solucionar esto, C# agregó el espacio de nombres System.Collections.Generic, donde cada colección está vinculada a un tipo declarado.

Una colección genérica como Lista Solo acepta cadenas de texto, por lo que los errores se detectan en tiempo de compilación y no se requiere ninguna conversión de tipo al leer un elemento. Esto hace que las colecciones genéricas sean más seguras, rápidas y fáciles de leer, razón por la cual son la opción predeterminada en el código C# moderno.

Las colecciones genéricas más comunes se enumeran a continuación:

  • Lista : Una lista redimensionable basada en índices, el reemplazo genérico de ArrayList.
  • Diccionario : Almacena pares clave-valor con búsquedas rápidas basadas en hash.
  • Conjunto de hashes : Solo admite valores únicos y operaciones de conjuntos como la unión.
  • Cola : Una colección de tipo "primero en entrar, primero en salir", la versión genérica de Queue.
  • Pila : Una colección de último en entrar, primero en salir, la versión genérica de Stack.
  • Lista ordenada : Mantiene los pares clave-valor ordenados por clave en orden ascendente.

Ejemplo de colección de listas en C#

La lista es la colección genérica más utilizada porque se comporta como un array dinámico. El siguiente ejemplo crea una lista de cadenas, agrega y elimina elementos, lee su tamaño y luego imprime los valores restantes. Todo el código está escrito en el archivo Program.cs.

Paso 1) Importa el espacio de nombres System.Collections.Generic y declara una lista de cadenas.

Paso 2) Agregue elementos con el método Add y elimine uno con el método Remove.

Paso 3) Lee la propiedad Count y luego recorre la lista con una instrucción foreach.

using System;
using System.Collections.Generic;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   List<string> tutorials = new List<string>();
   tutorials.Add("Java");
   tutorials.Add("Python");
   tutorials.Add("Kotlin");
   tutorials.Remove("Python");
   Console.WriteLine(tutorials.Count);
   foreach (string tutorial in tutorials)
   {
    Console.WriteLine(tutorial);
   }
   Console.ReadKey();
  }
 }
}

Code Explicación:-

  1. Se importa el espacio de nombres System.Collections.Generic para que el tipo List esté disponible para el programa.
  2. Una nueva lista Se crea un tutorial llamado y se agregan tres nombres con el método Add.
  3. El método Remove elimina el valor “Python”, lo que deja dos elementos en la lista.
  4. La propiedad Count devuelve el número de elementos, y el bucle foreach imprime cada valor restante en orden.

Cuando se ejecuta el programa, primero imprime el recuento de 2 (XNUMX %) Java y Kotlin en líneas separadas. Esto muestra cómo una colección cambia su tamaño en tiempo de ejecución, algo que una matriz fija no puede hacer.

Diferencia entre arrays y colecciones en C#

Ambos un matriz y una colección agrupan elementos relacionados bajo un mismo nombre, pero se comportan de manera diferente una vez que el programa está en ejecución. Saber cuándo usar cada uno te ayuda a escribir código más limpio y eficiente.

Las principales diferencias se enumeran a continuación:

  • Tamaño: Un array tiene una longitud fija que se establece al declararlo, mientras que una colección puede crecer o encogerse en cualquier momento.
  • Manejo de tipos: Un array almacena un único tipo, mientras que una colección puede ser segura en cuanto a tipos con genéricos o contener objetos de tipos mixtos cuando no es genérica.
  • Ubicación: Los arrays están integrados en el lenguaje, mientras que las clases de colección residen en los espacios de nombres System.Collections y System.Collections.Generic.
  • Operaciones integradas: Las colecciones ofrecen métodos ya preparados para agregar, eliminar, buscar y ordenar elementos, mientras que las matrices solo proporcionan un acceso indexado básico.
  • Mejores use: Elija una matriz cuando se conozca y sea fijo el número de elementos, y una colección cuando el recuento cambie a medida que se ejecuta el programa.

En resumen, los arrays son la mejor opción para datos de tamaño fijo, mientras que las colecciones ofrecen la flexibilidad que necesitan la mayoría de las aplicaciones del mundo real.

Preguntas Frecuentes

Utilice un diccionario cuando necesite búsquedas rápidas mediante una clave única, como un ID asociado a un registro. Encuentra valores en un tiempo casi constante, mientras que una lista debe examinar los elementos uno por uno.

HashSet y Dictionary ofrecen las búsquedas más rápidas porque utilizan funciones hash para acceder a un elemento en un tiempo casi constante. Una lista o un array son más lentos porque pueden necesitar comprobar cada elemento en secuencia.

Las colecciones concurrentes se encuentran en el espacio de nombres System.Collections.Concurrent y están diseñadas para código multihilo. Tipos como ConcurrentDictionary y BlockingCollection permiten que varios hilos agreguen y eliminen elementos de forma segura sin necesidad de bloqueos manuales.

IEnumerable es la interfaz base que solo admite la lectura de elementos mediante un bucle foreach. ICollection la extiende y añade miembros como Count, Add y Remove, por lo que también admite la modificación de la colección.

List es una colección genérica y segura en cuanto a tipos que almacena un único tipo declarado, lo que permite realizar comprobaciones en tiempo de compilación y ofrece un mejor rendimiento. ArrayList no es genérico y almacena cada elemento como un objeto, lo que requiere conversiones de tipo y permite la mezcla de tipos.

Una pila funciona según el principio de último en entrar, primero en salir (LIFO), por lo que el elemento más reciente se elimina primero mediante la función Pop. Una cola funciona según el principio de primero en entrar, primero en salir (FIFO), por lo que el elemento más antiguo se elimina primero mediante la función Dequeue.

Sí. GitHub Copilot puede sugerir el tipo de colección adecuado, generar bucles que añaden o filtran elementos y completar consultas LINQ a partir de un breve comentario, lo que acelera el trabajo con listas, diccionarios y otras colecciones.

ML.NET alimenta los datos de entrenamiento a través de colecciones como List e IEnumerable, que se corresponden con su canalización IDataView. Almacenar las muestras en una colección genérica fuertemente tipada mantiene el flujo de trabajo de aprendizaje automático claro y con tipos seguros.

Resumir este post con: