TGViewer
StepOne | Степан Минин StepOne | Степан Минин @steponeit · 3.27K subscribers
Post #255 2.16K
Priority Queue

В .NET 6 завезли такую настоящую объекто-ориентированную очередь с приоритетами.

Объектно-ориентированная в смысле поддержки своих формальных типовых параметров:

▪️TElement - тип содержимого очереди

▪️TPriority - тип приоритета содержимого очереди

По сути своей, это сортирующая коллекция, в которой приоритет выступает ключом сортировки.

Причём в конструктор очереди, можно передать экземпляр IComparer<T>, чтобы, например, определить направление сортировки:

// сортируем по убыванию некоторой даты
var queue = new PriorityQueue<string, DateTimeOffset>(
Comparer<DateTimeOffset>.Create((x, y) => y.CompareTo(x)));

queue.Enqueue("abv", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(2)));
queue.Enqueue("ghj", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(3)));
queue.Enqueue("123", DateTimeOffset.UtcNow.Subtract(TimeSpan.FromDays(1)));

while (queue.TryDequeue(out var card, out var addedOn))
{
Console.WriteLine($"{card}, {addedOn}");
}
// чтение выведет: 123 | abv | ghj


Получается, можно постоянно туда что-то докидывать и получать отсортированные подвыборки, помимо решения задачи приоритизирования.

Из недостатков можно отметить, что класс PriorityQueue<TElement, TPriority> не реализует никаких LINQ интерфейсов, или интерфейсов коллекций, поэтому совместимость с другими API придётся реализовывать самому.

Больше прочитать про внутреннее устройство класса можно в статье Вадима Мартынова на Хабре
Хабр .NET 6: PriorityQueue В .NET 6 появилась новая коллекция — PriorityQueue<TElement,TPriority>. До этого очереди с приоритетами уже были в .NET, но только в виде внутренних классов — они использовались под капотом...
  • 👍 24
  • ❤ 2
  • 🔥 2
More from @steponeit
  1. Sep 25, 2026Рассказал как я добавил в HydraScript объекты и методы без классов и сделал протоколы. Стр…
  2. Sep 22, 2026Post #858
  3. Sep 21, 2026Post #857
  4. Sep 15, 2026Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентн…
  5. Sep 12, 2026StepOne — официальный контрибутор FusionCache 🤙 Между набросами можно ещё и код писать Fu…
  6. Sep 11, 2026Стояк работодателей 2026 🤫 Оказывается, год назад я предсказал выход Астры! И вместе с эт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →