PriorityQueue en C#

Con la llegada de .NET 6 nos ha llegado una nueva colección, el tipo PriorityQueue (colas con prioridad), en este post vamos a ver cómo trabajar con él. 

 

1 - Qué es PriorityQueue en C#?

Anteriormente vimos el tipo Queue<T> el cual representa una cola FIFO

El tipo PriorityQueue nos permite indicar en qué posición vamos a incluir cada uno de los elementos que queramos añadir Este nuevo tipo lo representamos con PriorityQueue<TElement, TPriority>(); El primer tipo contendrá nuestro valor, y el segundo tipo es el que va a definir la prioridad.

priority queue descripción

El uso de PriorityQueue puede resultar muy similar al uso de SortedList, pero no es lo mismo, ya que las colas no están pensadas para ser utilizadas como listas, aunque técnicamente se puede.

 

 

2 -  Crear una PriorityQueue y añadir elementos en C#

Para crear una cola de prioridad (PriorityQueue) únicamente debemos instanciarla e invocar el método .Enqueue() para incluir elementos, pero recuerda que debemos pasar dos parámetros, el valor y la propiedad.

PriorityQueue<string, int> colaPrioridad = new PriorityQueue<string, int>();

colaPrioridad.Enqueue("Opel", 2);
colaPrioridad.Enqueue("Audi", 1);
colaPrioridad.Enqueue("BMW", 3);
  • Nota: si añadimos múltiples elementos con la misma prioridad, estos saldrán de la cola en orden inverso

 

 

3 - Recibir elementos de una PriorityQueue en C#

Para recibir elementos tenemos tres opciones

  • Peek(): el cual nos devolverá el siguiente ítem de la cola sin removerlo de la cola.
  • Dequeue(): El cual nos devuelve el último ítem de la cola y lo remueve de la misma.
  • EnqueueDequeue(): alternativamente podemos utilizar esta versión la cual además de permitirnos recibir el elemento de la cola a sacar, nos permite introducir uno a nosotros mismos.
string resultPeek = colaPrioridad.Peek();
string resultDequeue = colaPrioridad.Dequeue();
string resultDequeue2 = colaPrioridad.EnqueueDequeue("Mazda", 3);
Console.WriteLine(resultPeek); //Audi
Console.WriteLine(resultDequeue); //Audi otra vez
Console.WriteLine(resultDequeue2); //Opel

 

 

4 - Eliminar elementos de una cola de prioridad en C#

Para eliminar elementos de una cola de prioridad sin recibirlos la única opción es limpiar dicha cola utilizando .Clear().

colaPrioridad.Clear();

 

 

Conclusión

En este post hemos visto cómo crear una cola de prioridad en C#

Cómo añadir elementos a una cola de prioridad

Cómo recibir elementos de una cola de prioridad.

 

Comparte