Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 221|Відповідь: 1

[Джерело] . Пріоритетна черга PriorityQueue у NET6

[Копіювати посилання]
Опубліковано 2025-10-20 10:02:53 | | | |
.NET 6 вводить новий тип колекції — PriorityQueue, який, як випливає з назви, додає підтримку пріоритетів поверх звичайної черги. Примітка: ВінНе безпечний для різьби, потрібно звертати увагу на питання безпеки потоків.

Джерело:Вхід за гіперпосиланням видно.

Починайте

Давайте розглянемо простий приклад використання:
Приклад результату:



Ви можете побачити, що порядок виводу протилежний до того, який ми додали. PriorityQueue починається з найменшого пріоритету при виході з черги, чим менше значення, тим вищий пріоритет, тим вищий пріоритет, тим вищий пріоритет, тим більший пріоритет вихід, якщо ми хочемо отримати максимальний результат першим, чи це нормально, відповідь — так, але нам потрібно вказати власні правила порівняння пріоритетів, ви можете посилатися на наступний приклад

Сцени

При автоматичному сортуванні з пріоритетом ми можемо розглянути використання PriorityQueue, коли потрібно виконати автосортування

Черга повідомлень

За допомогою PriorityQueue можна реалізувати пріоритетну чергу, що дозволяє користувачам визначати пріоритет повідомлення під час відправлення, і він буде пріоритетним при споживанні.

У наведеному вище прикладі ми за замовчуванням визначаємо int як тип пріоритету і об'єднуємо деякі повідомлення в чергу, але часто існує багато повідомлень, і можуть бути ситуації з однаковим пріоритетом, які ми можемо використовуватичас і інтелект як федеративний пріоритетний типВи можете посилатися на наступний приклад:
Приклад результату такий:



З наведених вище результатів видно, що у випадку пріоритету ми спочатку обробляємо повідомлення з меншим часом, або можемо налаштувати метод сортування відповідно до власних потреб і налаштувати логіку порівняння пріоритетів.

Рангу

PriorityQueue також може використовуватися у багатьох програмах для ранжування, наприклад, для оцінки успішності учнів

Погляньте на приклад коду нижче:
Наведений вище список — це список оцінок, просто напишіть кілька тестових даних, через UnorderedItems PriorityQueue ми можемо отримати дані перед сортуванням, і це також порядок, у якому ми приєднуємося до черги (Enline), стандартне порівняння — це малий перший, тобто низький бал — перший, потім ми хочемо відсортувати від найбільшого до найменшого — потрібно налаштувати метод порівняння.

Вищенаведений вище High2LowComparer — це кастомне порівняння, яке фактично є оберненням результату порівняння, і код виглядає так:
Наведені вище результати виглядають так:



Більше

У Redis існує тип даних zset (sortedSet), який може робити подібні речі, але між zset і PriorityQueue все ще є деякі відмінності: zset — це множина, колекція, яка автоматично дедуплютує, хоча PriorityQueue залишається чергою не буде дедуплікована, zset може змінювати пріоритет (score) відповідного елемента, але 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