.NET 6 introducerer en ny samlingstype, PriorityQueue, som, som navnet antyder, tilføjer prioritetsunderstøttelse oven på almindelig Queue. Bemærk: Det er hanIkke-gevindsikker, du skal være opmærksom på trådsikkerhed.
Kilde:Hyperlink-login er synlig.
Kom i gang
Lad os se på et simpelt eksempel på brug:
Eksempeloutput:
Du kan se, at rækkefølgen af output er modsat den rækkefølge, vi tilføjede, PriorityQueue starter med den mindste prioritet ved dequeue, jo mindre værdi, jo højere prioritet, jo højere prioritet, jo højere prioritet, jo højere prioritet, jo mere prioritet output, hvis vi vil have det maksimale output først, er det okay, svaret er ja, men vi skal specificere vores egne prioriteringssammenligningsregler, du kan se følgende eksempel
Scener
Med automatisk sortering med prioritet kan vi overveje at bruge PriorityQueue, når vi skal lave noget automatisk sortering
Beskedkø
Med PriorityQueue kan en prioritetsbeskedkø implementeres, hvilket tillader brugere at angive prioriteten på en besked, når de sender en besked, og den vil blive prioriteret ved forbrug.
I eksemplet ovenfor angiver vi en int som typen Priority som standard og samler nogle beskeder i køen, men der er ofte mange beskeder, og der kan være situationer med samme prioritet, som vi kan brugeTid og Int som en fødereret prioritetstypeDu kan henvise til følgende eksempel:
Et eksempel på outputtet er som følger:
Ud fra ovenstående resultater kan det ses, at i tilfælde af prioritet vil vi først behandle beskeder med kortere tid, eller vi kan tilpasse sorteringsmetoden efter vores egne behov og tilpasse prioriteringssammenligningslogikken.
Rang
PriorityQueue kan også bruges i mange rangeringsapplikationer, såsom en rangering af studerendes præstationer
Tag et kig på eksempelkoden nedenfor:
Ovenstående liste er en liste over karakterer, skriv blot nogle testdata, gennem PriorityQueues UnorderedItems kan vi hente dataene før sortering, og det er også rækkefølgen, vi går ind i køen (Enqueue), standardsammenligningen er den lille først, det vil sige, den lave score er først, derefter vil vi sortere fra størst til mindst, vi skal tilpasse sammenligningsmetoden.
Ovenstående High2LowComparer er en brugerdefineret sammenligning, som faktisk er en invers af sammenligningsresultatet, og koden er som følger:
Outputtet ovenfor er som følger:
Mere
Der findes en zset(sortedSet)-type data i Redis, som kan gøre lignende ting, men der er stadig nogle forskelle mellem zset og PriorityQueue; zset er et sæt, en samling der automatisk dedupliceres, mens PriorityQueue stadig er en kø, vil ikke blive dedupliceret; zset kan ændre prioriteten (scoren) for det tilsvarende element, men PriorityQueue I øjeblikket understøttes det ikke at ændre den tilsvarende prioritet for et element
PriorityQueue kan løse nogle af vores problemer, men der er et par ting, du skal huske på, når du bruger det:
- For det første, hvis prioriteten er den samme, kan rækkefølgen af outputtet være anderledes, hvilket bestemmes af dens interne implementeringsalgoritme, og rækkefølgen kan ikke garanteres strengt
- PriorityQueue er ikke-trådsikker, og trådsikre problemer skal bemærkes
- Peek-metoden i PriorityQueue henter kun det kommende element i køen, men fjerner det ikke fra køen
(Slut) |