Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 221|Antwoord: 1

[Bron] . PriorityQueue prioriteitswachtrij in NET6

[Link kopiëren]
Geplaatst op 20-10-2025 10:02:53 | | | |
.NET 6 introduceert een nieuw verzameltype, PriorityQueue, dat, zoals de naam al doet vermoeden, prioriteitsondersteuning toevoegt bovenop de gewone Queue. Opmerking: Hij isNiet-schroefdraadveilig, je moet letten op de veiligheid van de draad.

Bron:De hyperlink-login is zichtbaar.

Slag

Laten we eens kijken naar een eenvoudig voorbeeld van gebruik:
Voorbeelduitvoer:



Je ziet dat de volgorde van output het tegenovergestelde is van de volgorde die we hebben toegevoegd, PriorityQueue begint met de kleinste prioriteit bij dequeue, hoe kleiner de waarde, hoe hoger de prioriteit, hoe hoger de prioriteit, hoe hoger de prioriteit, hoe meer prioriteit de output, als we eerst de maximale output willen, is dat dan oké, het antwoord is ja, maar we moeten onze eigen prioriteitsvergelijkingsregels specificeren, je kunt het volgende voorbeeld raadplegen

Scènes

Met automatische sortering met prioriteit kunnen we overwegen PriorityQueue te gebruiken wanneer we auto-sortering nodig hebben

Berichtwachtrij

Met PriorityQueue kan een prioriteitsberichtwachtrij worden geïmplementeerd, waardoor gebruikers de prioriteit van een bericht kunnen specificeren bij het verzenden van een bericht, en deze wordt geprioriteerd bij het consumeren.

In het bovenstaande voorbeeld specificeren we een int standaard als het type Prioriteit, en voegen we enkele berichten samen in de wachtrij, maar er zijn vaak veel berichten en er kunnen situaties zijn met dezelfde prioriteit, die we kunnen gebruikenTijd en Int als een gefedereerd prioriteitstypeJe kunt het volgende voorbeeld noemen:
Een voorbeeld van de output is als volgt:



Uit bovenstaande resultaten blijkt dat we in het geval van prioriteit eerst berichten met minder tijd verwerken, of de sorteermethode kunnen aanpassen aan onze eigen behoeften en de prioriteitsvergelijkingslogica kunnen aanpassen.

Rang

PriorityQueue kan ook worden gebruikt in veel rangschikkingsapplicaties, zoals een rangschikking van studentenprestaties

Bekijk de voorbeeldcode hieronder:
De bovenstaande lijst is een lijst met cijfers, schrijf gewoon een paar testgegevens, via PriorityQueue's UnorderedItems kunnen we de data ophalen voordat we sorteren, en het is ook de volgorde waarin we in de wachtrij komen (Enqueue), de standaardvergelijking is de kleine eerste, dat wil zeggen, de lage score is eerst, daarna willen we van groot naar kleinst sorteren en we moeten de vergelijkingsmethode aanpassen.

De bovenstaande High2LowComparer is een aangepaste vergelijking, die eigenlijk een inverse is van het vergelijkingsresultaat, en de code is als volgt:
De bovenstaande output is als volgt:



Meer

Er is een zset(sortedSet)-type data in Redis dat vergelijkbare dingen kan doen, maar er zijn nog steeds enkele verschillen tussen zset en PriorityQueue; zset is een set, een collectie die automatisch dedupliceert, terwijl PriorityQueue nog steeds een wachtrij is, niet wordt gededupliceerd; zset kan de prioriteit (score) van het bijbehorende element aanpassen, maar PriorityQueue Momenteel wordt het niet ondersteund om de bijbehorende prioriteit van een element te wijzigen

PriorityQueue kan enkele van onze problemen oplossen, maar er zijn een paar dingen om in gedachten te houden bij het gebruik:

  • Allereerst, als de prioriteit hetzelfde is, kan de volgorde van de output verschillen, wat wordt bepaald door het interne implementatiealgoritme, en de volgorde kan niet strikt worden gegarandeerd
  • PriorityQueue is niet thread-veilig, en thread-veilige problemen moeten worden opgemerkt
  • De Peek-methode in PriorityQueue haalt alleen het volgende element in de wachtrij op, maar verwijdert het niet uit de wachtrij
(Einde)




Vorig:Douyin Mall crawler analyse positioneert 6 goden, risicobeheersingsanalyse, nu zou het 7 goden moeten zijn X-Perseus
Volgend:Links naar EBPF-gerelateerde kennis
 Huisbaas| Geplaatst op 20-10-2025 10:09:05 |
Typische toepassingsscenario's

Noodoproepen in het ziekenhuis, taakplanningssysteem, bijvoorbeeld: prioriteitsoproep voor ernstig zieke patiënten, de code is als volgt:
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com