Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 221|Отговор: 1

[Източник] . Приоритетна опашка за приоритет в NET6

[Копирай линк]
Публикувано на 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
 Хазяин| Публикувано на 2025-10-20 10:09:05 |
Типични сценарии на приложение

Болнични спешни обаждания, система за планиране на задачи, например: приоритетно обаждане за критично болни пациенти, кодът е следният:
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com