|
|
Опубліковано 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
|