.NET 6 pristato naują rinkinio tipą PriorityQueue, kuris, kaip rodo jo pavadinimas, prideda prioritetinį palaikymą prie įprastos eilės. Pastaba: Jis yraNesaugus sriegiams, turite atkreipti dėmesį į sriegių saugos klausimus.
Šaltinis:Hipersaito prisijungimas matomas.
Pradėti
Pažvelkime į paprastą naudojimo pavyzdį:
Išvesties pavyzdys:
Galite pamatyti, kad išvesties tvarka yra priešinga mūsų pridėtai tvarkai, "PriorityQueue" prasideda mažiausiu prioritetu, kai išeinama iš eilės, kuo mažesnė reikšmė, tuo didesnis prioritetas, tuo didesnis prioritetas, tuo didesnis prioritetas, tuo didesnis prioritetas, tuo didesnis prioritetas išvestis, jei pirmiausia norime maksimalios išvesties, ar gerai, atsakymas yra taip, bet turime nurodyti savo prioritetų palyginimo taisykles, galite remtis šiuo pavyzdžiu
Scenos
Naudodami automatinį rūšiavimą su prioritetu, galime apsvarstyti galimybę naudoti "PriorityQueue", kai reikia atlikti automatinį rūšiavimą
Pranešimų eilė
Naudojant "PriorityQueue", galima įdiegti prioritetinių pranešimų eilę, leidžiančią vartotojams nurodyti pranešimo prioritetą siunčiant pranešimą, o vartojant jam bus teikiama pirmenybė.
Aukščiau pateiktame pavyzdyje pagal numatytuosius nustatymus nurodome int kaip prioriteto tipą ir kai kuriuos pranešimus sujungiame į eilę, tačiau dažnai yra daug pranešimų ir gali būti situacijų su tuo pačiu prioritetu, kurias galime naudotiLaikas ir int kaip federacinio prioriteto tipasGalite remtis šiuo pavyzdžiu:
Išvesties pavyzdys yra toks:
Iš aukščiau pateiktų rezultatų matyti, kad prioriteto atveju pirmiausia apdorosime pranešimus per trumpesnį laiką arba galime pritaikyti rūšiavimo metodą pagal savo poreikius ir pritaikyti prioritetų palyginimo logiką.
Rangas
"PriorityQueue" taip pat gali būti naudojamas daugelyje reitingavimo programų, pvz., mokinių rezultatų reitingavimui
Pažvelkite į toliau pateiktą kodo pavyzdį:
Aukščiau pateiktas sąrašas yra pažymių sąrašas, tiesiog parašykite keletą testo duomenų, naudodami "PriorityQueue" UnorderedItems galime gauti duomenis prieš rūšiuodami, taip pat tai yra tvarka, kuria prisijungiame prie eilės (Enqueue), numatytasis palyginimas yra mažas, tai yra, žemas balas yra pirmas, tada norime rūšiuoti nuo didžiausio iki mažiausio, turime pritaikyti palyginimo metodą.
Aukščiau pateiktas High2LowComparer yra pasirinktinis palyginimas, kuris iš tikrųjų yra atvirkštinis palyginimo rezultatui, o kodas yra toks:
Aukščiau pateikta išvestis yra tokia:
Daugiau
Redis yra zset(sortedSet) tipo duomenys, kurie gali atlikti panašius dalykus, tačiau vis dar yra tam tikrų skirtumų tarp zset ir PriorityQueue, zset yra rinkinys, rinkinys, kuris automatiškai pašalina dublikatus, o PriorityQueue vis dar yra eilė nebus pašalinta, zset gali keisti atitinkamo elemento prioritetą (balą), bet PriorityQueue Šiuo metu nepalaikomas atitinkamo elemento prioriteto keitimas
"PriorityQueue" gali išspręsti kai kurias mūsų problemas, tačiau ją naudojant reikia atsiminti keletą dalykų:
- Visų pirma, jei prioritetas yra tas pats, išvesties tvarka gali būti skirtinga, kurią lemia jo vidinis įgyvendinimo algoritmas, o tvarka negali būti griežtai garantuota
- "PriorityQueue" nėra saugi gijomis, todėl reikia atkreipti dėmesį į saugias gijų problemas
- "Peek" metodas "PriorityQueue" gaus tik būsimą elementą iš eilės, bet nepašalins jo iš eilės
(Pabaiga) |