A .NET 6 új gyűjteménytípust vezet be, a PriorityQueue-t, amely, ahogy a neve is mutatja, prioritási támogatást ad a hagyományos Queue fölé. Megjegyzés: ŐNem szál-biztonságos, figyelned kell a menetbiztonság kérdéseire.
Forrás:A hiperlink bejelentkezés látható.
Induláshoz
Nézzünk meg egy egyszerű példát a használatra:
Példa kimenet:
Láthatod, hogy a kimenet sorrendje ellentétes a hozzáadott sorrenddel, a PriorityQueue a legkisebb prioritással kezdődik a sorrend levonásakor, minél kisebb az érték, annál magasabb az elsőbbség, annál magasabb az első, annál magasabb a kimenet, ha először a maximális kimenetet akarjuk, rendben van, a válasz igen, de meg kell határoznunk a saját prioritás-összehasonlító szabályait, lásd a következő példát, lásd a következő példát
Jelenetek
Az automatikus rendezéssel prioritással fontolóra vehetjük a PriorityQueue használatát, amikor automatikus rendezésre van szükségünk
Üzenetsorban
A PriorityQueue segítségével megvalósítható egy prioritási üzenetsor, amely lehetővé teszi a felhasználók számára, hogy meghatározza az üzenet prioritását üzenet küldésekor, és az is prioritást kap a fogyasztás során.
A fenti példában alapértelmezés szerint egy int típust jelölünk meg prioritásként, és néhány üzenetet összeolvasztunk a sorba, de gyakran sok üzenet van, és előfordulhatnak olyan helyzetek, amelyek ugyanazt az elsőbbséget képviselik, amit használhatunkIdő és Intel szövetségi prioritáskéntA következő példára hivatkozhatsz:
A kimenet példája a következő:
A fenti eredményekből látható, hogy prioritás esetén először kevesebb idővel dolgozzuk fel az üzeneteket, vagy testreszabhatjuk a rendezési módszert saját igényeink szerint, és testreszabhatjuk az elsőbbségi összehasonlító logikát.
Rang
A PriorityQueue számos rangsorolási alkalmazásban is használható, például a diákok teljesítményének rangsorolásában
Nézze meg az alábbi példakódot:
A fenti lista a jegyek listája, csak írj néhány tesztadatot, a PriorityQueue UnorderedItems funkcióján keresztül megkaphatjuk az adatokat a rendezés előtt, és ez az a sorrend is, ahogyan csatlakozunk a sorhoz (Enqueue), az alapértelmezett összehasonlítás a kis első, vagyis az alacsony pontszám az első, majd a legnagyobbtól a legkisebbig válogatni kell, és testreszabni kell az összehasonlító módszert.
A fenti High2LowComparer egy egyedi összehasonlítás, amely valójában az összehasonlító eredmény inverse, és a kód a következő:
A fenti kimenet a következő:
Több
Van egy zset(sortedSet) típusú adat a Redisben, amely hasonló dolgokat tud csinálni, de még mindig vannak különbségek a zset és a PriorityQueue között, a zset egy halmaz, egy gyűjtemény, amely automatikusan dednuklikál, míg a PriorityQueue továbbra is egy sor, nem dedpîlikálják, a zset módosíthatja a megfelelő elem prioritását (pontszámát), de a PriorityQueue Jelenleg nem támogatott egy elem megfelelő prioritásának módosítása
A PriorityQueue megoldhat néhány problémánkat, de van néhány dolgot, amit érdemes szem előtt tartani használatkor:
- Először is, ha az elsőbbség ugyanaz, a kimenet rendje eltérő lehet, amit a belső megvalósítási algoritmus határoz meg, és a sorrend nem szigorúan garantálható
- A PriorityQueue nem szál-biztonságos, és a szálbiztonsági problémákat meg kell jegyezni
- A PriorityQueue Peek metódusa csak a következő elemet kéri a sorban, de nem távolítja el a sorból
(Vége) |