.NET 6 introduserer en ny samlingstype, PriorityQueue, som, som navnet antyder, legger til prioritetsstøtte oppå vanlig Queue. Merk: Det er hanIkke-gjengesikker, du må være oppmerksom på trådsikkerhet.
Kilde:Innloggingen med hyperkoblingen er synlig.
Kom i gang
La oss se på et enkelt eksempel på bruk:
Eksempelutdata:
Du kan se at rekkefølgen på output er motsatt av rekkefølgen vi la til, PriorityQueue starter med lavest prioritet ved dequeue, jo lavere verdi, jo høyere prioritet, jo høyere prioritet, jo høyere prioritet, jo høyere prioritet, jo høyere prioritet er output, hvis vi vil ha maksimal output først, er det greit, svaret er ja, men vi må spesifisere våre egne prioriteringssammenligningsregler, du kan se følgende eksempel
Scener
Med automatisk sortering med prioritet kan vi vurdere å bruke PriorityQueue når vi trenger å gjøre automatisk sortering
Meldingskø
Med PriorityQueue kan en prioritert meldingskø implementeres, slik at brukere kan spesifisere prioriteten til en melding når de sender en melding, og den vil bli prioritert ved forbruk.
I eksempelet ovenfor spesifiserer vi en int som typen Priority som standard, og slår sammen noen meldinger i køen, men det er ofte mange meldinger, og det kan være situasjoner med samme prioritet som vi kan brukeTid og intelligens som en føderert prioritetstypeDu kan se på følgende eksempel:
Et eksempel på utgangen er som følger:
Fra resultatene ovenfor kan man se at i tilfelle prioritet vil vi først behandle meldinger med kortere tid, eller vi kan tilpasse sorteringsmetoden etter egne behov, og tilpasse prioriteringssammenligningslogikken.
Rang
PriorityQueue kan også brukes i mange rangeringsapplikasjoner, som rangering av studentprestasjoner
Ta en titt på eksempelkoden nedenfor:
Listen over er en liste over karakterer, bare skriv noen testdata, gjennom PriorityQueues UnorderedItems kan vi hente dataene før sortering, og det er også rekkefølgen vi går inn i køen (Enqueue), standardsammenligningen er den lille først, det vil si at lavpoengsummen er først, så vil vi sortere fra størst til minst, vi må tilpasse sammenligningsmetoden.
High2LowComparer ovenfor er en tilpasset sammenligning, som faktisk er en invers av sammenligningsresultatet, og koden er som følger:
Resultatet ovenfor er som følger:
Mer
Det finnes en zset(sortedSet)-type data i Redis som kan gjøre lignende ting, men det er fortsatt noen forskjeller mellom zset og PriorityQueue; zset er en mengde, en samling som automatisk dedupliseres, mens PriorityQueue fortsatt er en kø vil ikke bli deduplisert, zset kan endre prioritet (score) til det tilsvarende elementet, men PriorityQueue For øyeblikket støttes det ikke å endre den tilsvarende prioriteten til et element
PriorityQueue kan løse noen av problemene våre, men det er noen ting å huske på når du bruker det:
- Først og fremst, hvis prioriteten er den samme, kan rekkefølgen på utdataene være annerledes, noe som bestemmes av dens interne implementasjonsalgoritme, og rekkefølgen kan ikke garanteres strengt
- PriorityQueue er ikke trådsikker, og trådsikre problemer må nevnes
- Peek-metoden i PriorityQueue henter kun det kommende elementet i køen, men fjerner det ikke fra køen
(Slutt) |