|
|
Публикувано на 2025-10-20 10:02:53
|
|
|
|

.NET 6 въвежда нов тип колекция, PriorityQueue, който, както подсказва името му, добавя поддръжка на приоритети върху обикновената опашка. Забележка: Той еБез нишка, трябва да обърнете внимание на проблемите с безопасността на нишките.
Източник:Входът към хиперлинк е видим.
Започнете
Нека разгледаме един прост пример за употреба:
Примерен изход:
Виждате, че редът на изход е противоположен на добавения от нас ред. PriorityQueue започва с най-малкия приоритет при премахване от опашка, колкото по-малка е стойността, толкова по-висок е приоритетът, толкова по-висок е приоритетът, толкова по-висок е приоритетът, толкова по-висок е изходът, ако искаме първи максималния изход, дали е приемливо, отговорът е да, но трябва да определим нашите собствени правила за сравнение на приоритети, можете да се обърнете към следния пример.
Сцени
При автоматично сортиране с приоритет можем да обмислим използването на PriorityQueue, когато трябва да направим някакво автоматично сортиране
Опашка за съобщения
С PriorityQueue може да се реализира опашка за приоритетни съобщения, позволяваща на потребителите да задават приоритета на съобщението при изпращане на съобщение и тя ще бъде приоритизирана при консумация.
В горния пример по подразбиране задаваме int като тип приоритет и сливаме някои съобщения в опашката, но често има много съобщения и може да има ситуации със същия приоритет, които можем да използвамевреме и интелигентност като федеративен приоритетен типМожете да се обърнете към следния пример:
Пример за изхода е следният:
От горните резултати се вижда, че при приоритет първо обработваме съобщенията с по-малко време, или можем да персонализираме метода на сортиране според собствените си нужди и да персонализираме логиката на сравнение на приоритети.
Ранк
PriorityQueue може да се използва и в много приложения за класиране, като например класиране на представянето на учениците
Вижте примерния код по-долу:
Горният списък е списък с оценки, просто напишете няколко тестови данни, чрез UnorderedItems на PriorityQueue можем да получим данните преди сортиране, и това е и редът, в който се присъединяваме към опашката (Enqueue), стандартното сравнение е малкото първи, тоест ниският резултат е първи, след което искаме да сортираме от най-голямо към най-малко, трябва да персонализираме метода на сравнение.
Горният High2LowComparer е персонализирано сравнение, което всъщност е обратно на резултата от сравнението, а кодът е следният:
Горният изход е следният:
Още
В Redis има zset(sortedSet) тип данни, които могат да правят подобни неща, но все пак има някои разлики между zset и PriorityQueue, zset е множество, колекция, която автоматично се дедуплира, докато PriorityQueue все още е опашка, няма да бъде дедупликатиран, zset може да променя приоритета (резултата) на съответния елемент, но PriorityQueue В момента не се поддържа промяна на съответния приоритет на елемент
PriorityQueue може да реши някои от нашите проблеми, но има няколко неща, които трябва да имате предвид при използването му:
- Първо, ако приоритетът е същият, редът на изхода може да е различен, което се определя от вътрешния алгоритъм за имплементация, и редът не може да бъде строго гарантиран
- PriorityQueue не е нишково-безопасен и трябва да се отбележат проблеми, свързани със сигурността на нишките
- Методът Peek в PriorityQueue ще изтегли само предстоящия елемент от опашката, но няма да го премахне от опашката
(Край) |
Предишен:Анализ на краулъра в Douyin Mall, позициониране на 6 богове, анализ на контрол на риска, сега трябва да са 7 богове X-PerseusСледващ:Връзки към знания, свързани с EBPF
|