先日書いた DateOny、TimeOnly と同様に
.NEt 6から新規追加されたクラスとして
PriorityQueue<TElement,TPriority>
が実装されました
直訳すると優先度付きキュー
引数として、TPriority
が存在しており、
キューの優先度を設定できるようになっています
公式ドキュメント
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.priorityqueue-2
通常の Queue
public void Queue() { Queue<int> queue = new(); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); queue.Enqueue(4); queue.Enqueue(5); while(queue.TryDequeue(out int q)) { Console.WriteLine($"Queue value {q}"); // Queue value 1 // Queue value 2 // Queue value 3 // Queue value 4 // Queue value 5 } }
Queue に 1~5 の数字を順に詰めた変数queue
に対して
TryDequeue に失敗するまで順に処理しています
通常は優先度はないので上から順番に処理されています
PriorityQueue
public void PriorityQueue() { // 第2引数に優先度を設定する PriorityQueue<int, int> queue = new(); queue.Enqueue(1, 2); queue.Enqueue(2, 1); queue.Enqueue(3, 4); queue.Enqueue(4, 3); queue.Enqueue(5, 5); while (queue.TryDequeue(out int q, out int priority)) { Console.WriteLine($"Queue value {q}, priority {priority}"); // Queue value 2, priority 1 // Queue value 1, priority 2 // Queue value 4, priority 3 // Queue value 3, priority 4 // Queue value 5, priority 5 } }
PriorityQueue に 1~5 の数字を Priority とともに詰めた変数queue
に対して
TryDequeue に失敗するまで順に処理しています
設定した Priority の順序で Queue の処理がされています