|
|
Postat la 20-10-2025 10:02:53
|
|
|
|

.NET 6 introduce un nou tip de colecție, PriorityQueue, care, după cum sugerează și numele, adaugă suport pentru priorități peste coada obișnuită. Notă: EsteNon-sigur pentru filet, trebuie să fii atent la problemele legate de siguranța firului.
Sursă:Autentificarea cu hyperlink este vizibilă.
Începe
Să aruncăm o privire la un exemplu simplu de utilizare:
Exemplu de ieșire:
Puteți vedea că ordinea ieșirii este opusă ordinii pe care am adăugat-o, PriorityQueue începe cu cea mai mică prioritate la dequeue, cu cât valoarea este mai mică, cu atât prioritatea este mai mare, cu atât prioritatea este mai mare, cu atât mai mare este prioritatea de ieșire, dacă vrem mai întâi ieșirea maximă, este în regulă? Răspunsul este da, dar trebuie să specificăm propriile noastre reguli de comparație a priorităților, puteți face referire la următorul exemplu
Scene
Cu sortarea automată cu prioritate, putem lua în considerare folosirea PriorityQueue atunci când este nevoie de sortare automată
Coada de mesaje
Cu PriorityQueue, se poate implementa o coadă de mesaje prioritare, permițând utilizatorilor să specifice prioritatea unui mesaj la trimiterea unui mesaj și va fi prioritizată la consum.
În exemplul de mai sus, specificăm un int ca tip de prioritate implicit și combinăm unele mesaje în coadă, dar adesea există multe mesaje și pot exista situații cu aceeași prioritate, pe care le putem folosiTimpul și INT ca un tip de prioritate federatăPoți face referire la următorul exemplu:
Un exemplu de rezultat este următorul:
Din rezultatele de mai sus, se poate observa că, în cazul priorității, vom procesa mai întâi mesajele cu mai puțin timp sau putem personaliza metoda de sortare în funcție de propriile noastre nevoi și logica de comparație a priorităților.
Rang
PriorityQueue poate fi folosit și în multe aplicații de clasificare, cum ar fi un clasament al performanței studenților
Aruncă o privire la codul exemplu de mai jos:
Lista de mai sus este o listă de note, scrie doar câteva date de test, prin UnorderedItems de la PriorityQueue putem obține datele înainte de sortare, iar aceasta este și ordinea în care intrăm în coadă (Enqueue), comparația implicită este prima mică, adică scorul cel mai mic este prima, apoi vrem să sortăm de la cel mai mare la cel mai mic pentru a personaliza metoda de comparație.
High2LowComparer de mai sus este o comparație personalizată, care este de fapt inversul rezultatului comparației, iar codul este următorul:
Rezultatul de mai sus este următorul:
Mai mult
Există un tip de date zset (sortedSet) în Redis care poate face lucruri similare, dar există totuși unele diferențe între zset și PriorityQueue, zset este un set, o colecție care se deduplicează automat, în timp ce PriorityQueue este tot o coadă nu va fi deduplicată, zset poate modifica prioritatea (scorul) elementului corespunzător, dar PriorityQueue În prezent, nu este suportată modificarea priorității corespunzătoare a unui element
PriorityQueue poate rezolva unele dintre problemele noastre, dar există câteva aspecte de reținut când îl folosești:
- În primul rând, dacă prioritatea este aceeași, ordinea ieșirii poate fi diferită, ceea ce este determinat de algoritmul său intern de implementare, iar ordinea nu poate fi garantată strict
- PriorityQueue nu este sigur pentru thread-uri, iar problemele legate de thread-safe trebuie observate
- Metoda Peek din PriorityCare va prelua doar elementul următor din coadă, dar nu îl va elimina din coadă
(Sfârșit) |
Precedent:Analiza crawler-ului Douyin Mall, poziționarea 6 zei, analiza controlului riscului, acum ar trebui să fie 7 zei X-PerseuUrmător:Legături către cunoștințe legate de EBPF
|