Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 221|Respuesta: 1

[Fuente] . Cola de prioridad PriorityQueue en NET6

[Copiar enlace]
Publicado el 20-10-2025 10:02:53 | | | |
.NET 6 introduce un nuevo tipo de colección, PriorityQueue, que, como su nombre indica, añade soporte de prioridad sobre la cola ordinaria. Nota: Él esNo seguro para roscas, debes prestar atención a los problemas de seguridad de la rosca.

Fuente:El inicio de sesión del hipervínculo es visible.

Comenzar

Veamos un ejemplo sencillo de uso:
Ejemplo de salida:



Puedes ver que el orden de salida es opuesto al orden que añadimos, PriorityQueue comienza con la prioridad más baja al descolar, cuanto menor es el valor, mayor es la prioridad, mayor es la prioridad, mayor es la prioridad, más prioridad es la salida, si queremos la salida máxima, ¿está bien? La respuesta es sí, pero necesitamos especificar nuestras propias reglas de comparación de prioridades, puedes consultar el siguiente ejemplo

Escenas

Con el autoordenamiento con prioridad, podemos considerar usar PriorityQueue cuando necesitemos hacer auto-ordenamiento

Cola de mensajes

Con PriorityQueue, se puede implementar una cola de mensajes de prioridad, permitiendo a los usuarios especificar la prioridad de un mensaje al enviarlo, y se priorizará al consumirlo.

En el ejemplo anterior, especificamos un int como tipo de Prioridad por defecto y fusionamos algunos mensajes en la cola, pero a menudo hay muchos mensajes y puede haber situaciones con la misma prioridad, que podemos usarTiempo e INT como un tipo de prioridad federadaPuedes consultar el siguiente ejemplo:
Un ejemplo de la salida es el siguiente:



A partir de los resultados anteriores, se puede ver que en el caso de prioridad, primero procesaremos los mensajes con menos tiempo, o podemos personalizar el método de ordenación según nuestras propias necesidades y la lógica de comparación de prioridades.

Rango

PriorityQueue también puede usarse en muchas aplicaciones de clasificación, como una clasificación del rendimiento estudiantil

Echa un vistazo al código de ejemplo a continuación:
La lista anterior es una lista de calificaciones, solo hay que escribir unos pocos datos de prueba, a través de UnorderedItems de PriorityQueue podemos obtener los datos antes de ordenar, y también es el orden en que nos unimos a la cola (Enqueue), la comparación por defecto es la pequeña primero, es decir, la puntuación más baja es la primera, luego queremos ordenar de mayor a menor necesitamos personalizar el método de comparación.

El High2LowComparer anterior es una comparación personalizada, que en realidad es un inverso del resultado de la comparación, y el código es el siguiente:
La salida anterior es la siguiente:



Más

Existe un tipo de datos zset (sortedSet) en Redis que puede hacer cosas similares, pero aún existen algunas diferencias entre zset y PriorityQueue, zset es un set, una colección que se deduplica automáticamente, mientras que PriorityQueue sigue siendo una Queue no se deduplicará, zset puede modificar la prioridad (puntuación) del elemento correspondiente, pero PriorityQueue Actualmente, no se permite modificar la prioridad correspondiente de un elemento

PriorityQueue puede resolver algunos de nuestros problemas, pero hay algunas cosas que hay que tener en cuenta al usarla:

  • En primer lugar, si la prioridad es la misma, el orden de la salida puede ser diferente, lo cual está determinado por su algoritmo interno de implementación, y el orden no puede garantizarse estrictamente
  • PriorityQueue no es seguro para hilos, y hay que señalar los problemas seguros para hilos
  • El método Peek en PriorityQueue solo recuperará el elemento siguiente en la cola, pero no lo eliminará de la cola
(Fin)




Anterior:Análisis de crawler del centro comercial Douyin posicionando 6 dioses, análisis de control de riesgos, ahora deberían ser 7 dioses X-Perseo
Próximo:Enlaces con el conocimiento relacionado con EBPF
 Propietario| Publicado el 20-10-2025 10:09:05 |
Escenarios típicos de aplicación

Llamadas de emergencia hospitalarias, sistema de programación de tareas, por ejemplo: llamada prioritaria para pacientes gravemente graves, el código es el siguiente:
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com