Uno de los motivos por los que veo importante crear este post, es porque si alguna vez te preguntas cómo funcionan ciertos procesos de vuestros ordenadores o sistemas, asumid que es una cola, o muchas colas una detrás de otra. 9 de cada 10 veces, será una cola
Índice
1 - Qué son las colas en C#
En C# tenemos el tipo Queue que nos permite almacenar información en colas de tipo FIFO (las que entran primero salen primero).
Alternativamente en .NET tenemos el tipo Stack<T>
que almacena la información en un estilo LIFO (el último que entra, sale el primero) pero sobre Stack
hablaremos otro día.
Para utilizarlo, debemos saber que funciona con generics, osea Queue<T>
, y como cualquier otra cola, una vez el elemento ha sido leído, sale de la cola.
Por lo que no debemos iterar como haríamos con una lista, en teoría si podemos, pero si vamos a utilizar la cola como si fuera una lista, directamente utiliza List<T>
.
2 - Crear una cola y añadir elementos en C#
Para crear una cola es tan sencillo como directamente instanciarla y desde ahí simplemente debemos llamar al método Enqueue
.
Y tan sencillo como eso, habremos añadido elementos a la cola.
Queue<string> marcas = new Queue<string>();
marcas.Enqueue("Audi");
marcas.Enqueue("Opel");
marcas.Enqueue("BMW");
3 - Recibir elementos de una cola en C#
Para recibir elementos de una cola tenemos dos opciones.
Peek
, el cual es un método que nos devuelve el valor del primer elemento, pero no lo remueve de la cola.Dequeue
el cual devuelve el elemento y lo elimina de la cola
Queue<string> marcas = new Queue<string>();
marcas.Enqueue("Audi");
marcas.Enqueue("Opel");
marcas.Enqueue("BMW");
Console.WriteLine($"La primera marca es {marcas.Peek()}"); //Audi
Console.WriteLine($"La primera marca (otra vez) es {marcas.Dequeue()}"); //Audi
Console.WriteLine($"La segunda marca es {marcas.Dequeue()}"); //Opel
4 - Las colas y las colecciones en C#
Queue<T>
está dentro de System.Collections.Generic
y además el equipo de .NET ha introducido varias funcionalidades que están incluidas en la mayoría de tipos dentro de ese namespace, como puede ser implementar la interfaz IEnumerable<T>
la cual permite iterar sobre dicha cola.
foreach(string marca in marcas)
Console.WriteLine(marca);
Pero como he indicado antes, si vas a iterar de forma “normal” es mejor utilizar una lista.
También podemos convertir la cola a un array, limpiarla utilizando .Clear()
, o incluso comprobar si un elemento está en la cola con .Contains(T)
.
Finalmente indicar que podemos comprobar el tamaño de la cola utilizando .Count
y esto es importante, ya que si intentamos acceder a un elemento de la cola que no existe nos saltará una excepción InvalidOperation
.
Conclusión
Antes de terminar, quiero comentar que mi primera entrevista técnica en irlanda fue implementar sobre un array un método que hiciera lo mismo que dequeue en las colas FIFO.
Hemos aprendido como crear colas en C# y cómo trabajar con ellas.