|
|
Julkaistu 2025-10-20 10:02:53
|
|
|
|

.NET 6 esittelee uuden kokoelmatyypin, PriorityQueue, joka nimensä mukaisesti lisää prioriteettituen tavallisen jonon päälle. Huomautus: Hän onEi-säikeinen turvallinen, sinun täytyy kiinnittää huomiota kierteiden turvallisuuskysymyksiin.
Lähde:Hyperlinkin kirjautuminen on näkyvissä.
Aloittaa
Katsotaanpa yksinkertaista esimerkkiä käytöstä:
Esimerkkitulos:
Näet, että tulosten järjestys on päinvastainen kuin lisäsimme, PriorityQueue alkaa pienimmällä prioriteetilla dequeuessa, mitä pienempi arvo, sitä korkeampi prioriteetti, mitä korkeampi prioriteetti, mitä korkeampi prioriteetti, sitä suurempi prioriteetti, sitä suurempi prioriteetti, jos haluamme maksimituloksen ensin, onko se ok? Vastaus on kyllä, mutta meidän täytyy määritellä omat prioriteettivertailusäännöt, voit viitata seuraavaan esimerkkiin
Kohtauksia
Automaattisen lajittelun kanssa prioriteetilla voimme harkita PriorityQueuen käyttöä, kun tarvitsemme automaattista lajittelua
Viestijono
PriorityQueuella voidaan toteuttaa prioriteettiviestijono, jonka avulla käyttäjät voivat määrittää viestin prioriteetin viestiä lähettäessään, ja viesti priorisoidaan viestin kulutuksen yhteydessä.
Yllä olevassa esimerkissä määrittelemme int oletuksena prioriteettityypiksi ja yhdistämme joitakin viestejä jonoon, mutta viestejä on usein paljon, ja voi olla tilanteita, joissa prioriteetti on sama, joita voimme käyttääaika ja älykkyys liittoutuneina prioriteettityyppinäVoit katsoa seuraavaa esimerkkiä:
Esimerkki tuloksesta on seuraava:
Yllä olevista tuloksista voidaan nähdä, että prioriteettitilanteessa käsittelemme ensin viestit lyhyemmällä ajalla tai voimme räätälöidä lajittelutavan omien tarpeidemme mukaan ja räätälöidä prioriteettivertailulogiikkaa.
Sijoittua
PriorityQueuea voidaan käyttää myös monissa ranking-sovelluksissa, kuten opiskelijoiden suoritusjärjestyksessä
Katso alla oleva esimerkkikoodi:
Yllä oleva lista on arvosanojen lista, kirjoita vain muutama testidata, PriorityQueue:n UnorderedItems-toiminnon kautta voimme saada tiedot ennen lajittelua, ja se on myös jonon liitymisjärjestys (Enqueue). Oletusvertailu on pieni ensimmäinen, eli matala pistemäärä on ensin, sitten haluamme lajitella suurimmasta pienimpään, meidän täytyy räätälöidä vertailumenetelmä.
Yllä oleva High2LowComparer on räätälöity vertailu, joka on itse asiassa vertailutuloksen käänteinen, ja koodi on seuraava:
Yllä oleva tuloste on seuraava:
Enemmän
Redisissä on olemassa zset(sortedSet) tyyppinen data, joka voi tehdä samankaltaisia asioita, mutta zsetin ja PriorityQueue:n välillä on silti joitakin eroja, zset on joukko, kokoelma, joka automaattisesti deduplikoituu, kun taas PriorityQueue on edelleen Queue ei dedlikoitu, zset voi muuttaa vastaavan elementin prioriteettia (pistemäärää), mutta PriorityQueue Tällä hetkellä ei ole tuettua alkion vastaavan prioriteetin muuttamista
PriorityQueue voi ratkaista joitakin ongelmiamme, mutta on muutama asia, jotka kannattaa pitää mielessä sitä käyttäessä:
- Ensinnäkin, jos prioriteetti on sama, tuloksen järjestys voi olla eri, mikä määräytyy sisäisen toteutusalgoritmin mukaan, eikä järjestystä voida tiukasti taata
- PriorityQueue ei ole säiketurvallinen, ja säieturvalliset ongelmat on huomioitava
- Peek-menetelmä PriorityQueue:ssa hakee vain tulevan elementin jonosta, mutta ei poista sitä jonosta
(Loppu) |
Edellinen:Douyin Mallin crawler -analyysi, 6 jumalan sijoittaminen, riskienhallintaanalyysi, nyt pitäisi olla 7 jumalaa X-PerseusSeuraava:Linkkejä EBPF:ään liittyvään tietoon
|