|
|
Опубликовано 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 может изменить приоритет(score) соответствующего элемента, но PriorityQueue В настоящее время не поддерживается изменение соответствующего приоритета элемента
PriorityQueue может решить некоторые наши проблемы, но есть несколько моментов, которые стоит учитывать при его использовании:
- Прежде всего, если приоритет одинаков, порядок выхода может отличаться, что определяется его внутренним алгоритмом реализации, и порядок не может быть строго гарантирован
- PriorityQueue не является потечно-безопасным, и необходимо отмечать проблемы с безопасностью потоков
- Метод Peek в PriorityQueue будет забирать только следующий элемент в очереди, но не удаляет его из очереди
(Конец) |
Предыдущий:Анализ краулера в Douyin Mall, позиционирование 6 богов, анализ контроля рисков, теперь должно быть 7 богов X-PerseusСледующий:Ссылки на знания, связанные с EBPF
|