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.
Índice
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.
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.