.NET 6 zavádza nový typ kolekcie, PriorityQueue, ktorý, ako už názov napovedá, pridáva podporu priorít nad bežnou frontou. Poznámka: JeNe-bezpečná voči vláknam, musíte venovať pozornosť bezpečnostným otázkam vlákien.
Zdroj:Prihlásenie na hypertextový odkaz je viditeľné.
Začať
Pozrime sa na jednoduchý príklad použitia:
Príklad výstupu:
Vidíte, že poradie výstupov je opačné ako poradie, ktoré sme pridali. PriorityQueue začína s najmenšou prioritou, keď sa vyradí z fronty, čím menšia hodnota, tým vyššia priorita, čím vyššia priorita, čím vyššia priorita, tým väčšia priorita výstup, ak chceme najskôr maximálny výstup, je to v poriadku, odpoveď je áno, ale musíme si špecifikovať vlastné pravidlá porovnávania priorít, môžete sa pozrieť na nasledujúci príklad
Scény
Pri automatickom triedení s prioritou môžeme zvážiť použitie PriorityQueue, keď potrebujeme automatické triedenie
Fronta správ
S PriorityQueue je možné implementovať prioritnú frontu správ, ktorá umožňuje používateľom špecifikovať prioritu správy pri odoslaní správy, ktorá bude prioritizovaná pri jej konzumácii.
V uvedenom príklade špecifikujeme int ako predvolený typ Priority a niektoré správy zlúčime do fronty, ale často je tam veľa správ a môžu existovať situácie s rovnakou prioritou, ktoré môžeme použiťČas a int ako federovaný typ priorítMôžete sa odvolať na nasledujúci príklad:
Príklad výstupu je nasledovný:
Z vyššie uvedených výsledkov je vidieť, že v prípade priority najskôr spracujeme správy s kratším časom, alebo si môžeme prispôsobiť spôsob triedenia podľa našich potrieb a prispôsobiť logiku porovnávania priorít.
Rad
PriorityQueue sa dá použiť aj v mnohých aplikáciách na hodnotenie hodnotenia, napríklad v rebríčku výkonnosti študentov
Pozrite sa na príklad kódu nižšie:
Vyššie uvedený zoznam je zoznam známok, stačí napísať niekoľko testovacích dát, cez UnorderedItems v PriorityQueue môžeme získať dáta pred zoradením, a je to aj poradie, v akom sa pridávame do fronty (Enqueue), predvolené porovnanie je najprv malé, teda najnižšie skóre je prvé, potom chceme zoradiť od najväčšieho po najmenšie, potrebujeme prispôsobiť metódu porovnania.
Vyššie uvedený High2LowComparer je vlastné porovnanie, ktoré je v skutočnosti inverziou výsledku porovnania, a kód je nasledovný:
Výstup vyššie je nasledovný:
Viacej
V Redis existuje typ dát zset(sortedSet), ktoré dokážu podobné veci, ale stále existujú rozdiely medzi zset a PriorityQueue, zset je množina, kolekcia, ktorá automaticky deduplikuje, zatiaľ čo PriorityQueue je stále Queue nebude deduplikovaný, zset môže modifikovať prioritu (skóre) príslušného prvku, ale PriorityQueue V súčasnosti nie je podporované meniť zodpovedajúcu prioritu prvku
PriorityQueue môže vyriešiť niektoré naše problémy, ale pri jeho používaní je potrebné myslieť na niekoľko vecí:
- Po prvé, ak je priorita rovnaká, poradie výstupu môže byť odlišné, čo určuje jeho interný implementačný algoritmus, a poradie nemôže byť striktne garantované
- PriorityQueue nie je bezpečný pre vlákna a je potrebné poznamenať problémy s bezpečnosťou vlákien
- Metóda Peek v PriorityQueue načíta iba nadchádzajúci prvok vo fronte, ale neodstráni ho z fronty
(Koniec) |