Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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 может изменить приоритет(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