.NET 6 introducerar en ny samlingstyp, PriorityQueue, som, som namnet antyder, lägger till prioritetsstöd ovanpå vanlig Queue. Not: Han ärIcke-gängsäker, du måste vara uppmärksam på trådsäkerhet.
Källa:Inloggningen med hyperlänken är synlig.
Sätta igång
Låt oss titta på ett enkelt exempel på användning:
Exempelutdata:
Du kan se att ordningen på utdata är motsatt den ordning vi lade till, PriorityQueue börjar med minsta prioritet vid avkö, ju lägre värde, desto högre prioritet, högre prioritet, högre prioritet, ju högre prioritet, desto högre prioritet får utdata, om vi vill ha maximal utgång först, är det okej, svaret är ja, men vi behöver specificera våra egna prioriteringsjämförelseregler, du kan hänvisa till följande exempel
Scener
Med automatisk sortering med prioritet kan vi överväga att använda PriorityQueue när vi behöver göra viss automatisk sortering
Meddelandekö
Med PriorityQueue kan en prioriterad meddelandekö implementeras, vilket gör det möjligt för användare att ange prioriteten för ett meddelande när de skickar ett meddelande, och den prioriteras vid konsumtion.
I exemplet ovan anger vi en int som typen av Priority som standard, och slår ihop vissa meddelanden i kön, men det finns ofta många meddelanden, och det kan finnas situationer med samma prioritet, som vi kan användaTid och int som en federerad prioritetstypDu kan hänvisa till följande exempel:
Ett exempel på utdata är följande:
Av ovanstående resultat kan man se att i fallet med prioritet kommer vi först att behandla meddelanden med kortare tid, eller så kan vi anpassa sorteringsmetoden efter våra egna behov och anpassa logiken för prioriteringsjämförelse.
Rang
PriorityQueue kan också användas i många rankningsapplikationer, såsom en ranking av studenters prestation
Ta en titt på exempelkoden nedan:
Ovanstående lista är en lista över betyg, skriv bara några testdata, genom PriorityQueues UnorderedItems kan vi få fram data innan sortering, och det är också ordningen vi går med i kön (Enqueue), standardjämförelsen är den lilla första, det vill säga låga poängen är först, sedan vill vi sortera från störst till minsta behöver vi anpassa jämförelsemetoden.
Ovanstående High2LowComparer är en anpassad jämförelse, som faktiskt är en invers av jämförelseresultatet, och koden är som följer:
Resultatet ovan är följande:
Mer
Det finns en zset(sortedSet)-typ av data i Redis som kan göra liknande saker, men det finns fortfarande vissa skillnader mellan zset och PriorityQueue, zset är en mängd, en samling som automatiskt deduplicerar, medan PriorityQueue fortfarande är en kö kommer inte att dedupliceras, zset kan ändra prioriteten (poängen) för motsvarande element, men PriorityQueue För närvarande stöds det inte att ändra motsvarande prioritet för ett element
PriorityQueue kan lösa några av våra problem, men det finns några saker att tänka på när du använder det:
- För det första, om prioriteten är densamma, kan ordningen på utdata vara annorlunda, vilket bestäms av dess interna implementeringsalgoritm, och ordningen kan inte garanteras strikt
- PriorityQueue är icke-trådsäker, och trådsäkra problem måste noteras
- Peek-metoden i PriorityQueue hämtar bara det kommande elementet i kön, men tar inte bort det från kön
(Slut) |