|
|
Objavljeno 2025-10-20 10:02:53
|
|
|
|

.NET 6 uvaja novo vrsto zbirke, PriorityQueue, ki, kot že ime pove, dodaja podporo za prioritete poleg običajne vrste. Opomba: On jeNe-navojno varen, morate biti pozorni na vprašanja varnosti niti.
Izvir:Prijava do hiperpovezave je vidna.
Začnite
Poglejmo si preprost primer uporabe:
Primer izhoda:
Lahko vidite, da je vrstni red izhoda nasproten vrstnemu redu, ki smo ga dodali. PriorityQueue se začne z najmanjšo prioriteto, ko se umakne, manjša kot je vrednost, višja je prioriteta, višja prioriteta, višja prioriteta, višja prioriteta, večja prioriteta je izhod, če želimo največ izhoda najprej, je v redu? Odgovor je da, vendar moramo določiti lastna pravila primerjave prioritet, lahko se sklicujete na naslednji primer
Prizorov
Pri samodejnem razvrščanju s prednostjo lahko razmislimo o uporabi PriorityQueue, kadar potrebujemo samodejno razvrščanje
Čakalna vrsta sporočil
S PriorityQueue je mogoče implementirati prioritetno vrsto sporočil, ki uporabnikom omogoča določitev prioritete sporočila ob pošiljanju sporočila, ki bo prednostno določena pri porabi.
V zgornjem primeru privzeto določimo int kot vrsto Priority in združimo nekatera sporočila v čakalno vrsto, vendar je pogosto veliko sporočil in lahko pride do situacij z enako prioriteto, ki jih lahko uporabimoČas in inteligenca kot federirana prioritetna vrstaLahko se sklicujete na naslednji primer:
Primer izhoda je naslednji:
Iz zgornjih rezultatov je razvidno, da bomo v primeru prioritete najprej sporočila obdelali z manj časa, ali pa lahko prilagodimo metodo razvrščanja glede na svoje potrebe in prilagodimo logiko primerjave prioritet.
Rank
PriorityQueue se lahko uporablja tudi v številnih aplikacijah za ocenjevanje, na primer za ocenjevanje uspešnosti študentov
Oglejte si primer kode spodaj:
Zgornji seznam je seznam ocen, zapišite le nekaj testnih podatkov, prek PriorityQueue UnorderedItems lahko pridobimo podatke pred razvrstitvijo, prav tako pa je to vrstni red, v katerem se pridružimo vrsti (Enqueue), privzeta primerjava je najprej majhna, torej najnižja ocena je prva, nato želimo razvrstiti od največje do najmanjše in moramo prilagoditi metodo primerjave.
Zgornji High2LowComparer je prilagojena primerjava, ki je pravzaprav obrat rezultata primerjave, koda pa je naslednja:
Zgornji izhod je naslednji:
Več
V Redisu obstaja zset(sortedSet) tip podatkov, ki lahko počne podobne stvari, vendar so še vedno nekatere razlike med zset in PriorityQueue; zset je set, zbirka, ki se samodejno deduplikira, medtem ko je PriorityQueue še vedno Queue ne bo deduplikiran, zset lahko spremeni priority(score) ustreznega elementa, vendar PriorityQueue Trenutno ni podprta sprememba ustrezne prioritete elementa
PriorityQueue lahko reši nekatere naše težave, vendar je nekaj stvari, ki jih je treba upoštevati pri njegovi uporabi:
- Najprej, če je prioriteta enaka, je vrstni red izhoda lahko drugačen, kar določa njegov notranji algoritem implementacije, in vrstni red ni strogo zagotovljen
- PriorityQueue ni varen za niti in je treba opozoriti na varnostne težave, ki so varne za niti
- Metoda Peek v PriorityQueue bo pridobila le prihajajoči element v vrsti, vendar ga ne bo odstranila iz vrste
(Konec) |
Prejšnji:Analiza Douyin Mall crawlerja, pozicioniranje 6 bogov, analiza nadzora tveganja, zdaj bi moralo biti 7 bogov X-PerseusNaslednji:Povezave do znanja, povezanega z EBPF
|