.NET 6 introduit un nouveau type de collection, PriorityQueue, qui, comme son nom l’indique, ajoute un support prioritaire au-dessus de la file d’attente ordinaire. Note : Il estNon sûr du filetage, il faut faire attention aux questions de sécurité du filetage.
Source:La connexion hyperlientérée est visible.
Démarrer
Voyons un exemple simple d’utilisation :
Exemple de sortie :
Vous pouvez voir que l’ordre de sortie est opposé à l’ordre que nous avons ajouté : PriorityQueue commence avec la plus petite priorité lors de la défile, plus la valeur est petite, plus la priorité est élevée, plus la priorité est élevée, plus la priorité est élevée, plus la sortie est importante, si nous voulons d’abord la sortie maximale, est-ce acceptable ? La réponse est oui, mais nous devons spécifier nos propres règles de comparaison des priorités, vous pouvez vous référer à l’exemple suivant
Scènes
Avec l’auto-tri avec priorité, nous pouvons envisager d’utiliser PriorityQueue lorsque nous devons faire un tri automatique
File de messages
Avec PriorityQueue, une file de messages prioritaires peut être implémentée, permettant aux utilisateurs de spécifier la priorité d’un message lors de l’envoi d’un message, et elle sera priorisée lors de la consommation.
Dans l’exemple ci-dessus, nous spécifions un int comme type de priorité par défaut, et fusionnons certains messages dans la file d’attente, mais il y a souvent beaucoup de messages, et il peut y avoir des situations avec la même priorité, que nous pouvons utiliserTemps et INT comme type de priorité fédéréeVous pouvez vous référer à l’exemple suivant :
Voici un exemple de sortie :
D’après les résultats ci-dessus, on peut voir qu’en cas de priorité, nous traiterons d’abord les messages en moins de temps, ou nous pouvons personnaliser la méthode de tri selon nos propres besoins et personnaliser la logique de comparaison des priorités.
Rang
PriorityQueue peut également être utilisé dans de nombreuses applications de classement, telles que le classement des performances des élèves
Jetez un œil au code exemple ci-dessous :
La liste ci-dessus est une liste de notes, il suffit d’écrire quelques données de test, grâce à UnorderedItems de PriorityQueue nous pouvons obtenir les données avant le tri, et c’est aussi l’ordre dans lequel nous rejoignons la file (Enqueue), la comparaison par défaut est la petite d’abord, c’est-à-dire que le score le plus bas est la première, puis nous voulons trier du plus grand au plus petit pour personnaliser la méthode de comparaison.
Le High2LowComparer ci-dessus est une comparaison personnalisée, qui est en réalité l’inverse du résultat de la comparaison, et le code est le suivant :
La sortie ci-dessus est la suivante :
Plus
Il existe un type de données zset (sortedSet) dans Redis qui peut faire des choses similaires, mais il existe encore quelques différences entre zset et PriorityQueue, zset est un ensemble, une collection qui se déduplique automatiquement, tandis que PriorityQueue est toujours une file d’attente ne sera pas dédupliquée, zset peut modifier la priorité (score) de l’élément correspondant, mais PriorityQueue Actuellement, il n’est pas supporté de modifier la priorité correspondante d’un élément
PriorityQueue peut résoudre certains de nos problèmes, mais il y a quelques points à garder à l’esprit lors de son utilisation :
- Tout d’abord, si la priorité est la même, l’ordre de la sortie peut être différent, ce qui est déterminé par son algorithme d’implémentation interne, et l’ordre ne peut pas être strictement garanti
- PriorityQueue n’est pas thread-safe, et les problèmes thread-safe doivent être signalés
- La méthode Peek dans PriorityQueue ne récupère que l’élément suivant dans la file, mais ne le retire pas de la file
(Fin) |