|
|
2025-10-20 tarihinde yayınlandı 10:02:53
|
|
|
|

.NET 6, adından da anlaşılacağı gibi sıradan Queue'nun üzerine öncelik desteği ekleyen yeni bir koleksiyon türü olan PriorityQueue'u tanıtıyor. Not: Oİşlik için güvenli olmayan, diş güvenliği sorunlarına dikkat etmelisiniz.
Kaynak:Bağlantı girişi görünür.
Başlayın
Basit bir kullanım örneğine bakalım:
Örnek çıktı:
Çıktı sırasının eklediğimiz sıranın tam tersi olduğunu görebilirsiniz, PriorityQueue kuyruğu çıkarırken en küçük öncelikle başlar, değer ne kadar küçükse, öncelik o kadar yüksek, öncelik o kadar yüksek, prioriye o kadar yüksek, çıktı o kadar yüksek öncelikli, eğer önce maksimum çıktıyı istersek, uygun mu? cevap evet, ama kendi öncelik karşılaştırma kurallarımızı belirtmemiz gerekiyor, aşağıdaki örneğe başvurabilirsiniz
Sahne
Öncelikli otomatik sıralama ile, otomatik sıralama yapmamız gerektiğinde PriorityQueue'u kullanmayı düşünebiliriz
Mesaj Kuyruğu
PriorityQueue ile, kullanıcıların mesaj gönderirken önceliğini belirtmesine olanak tanıyan öncelikli mesaj kuyruğu uygulanabilir ve bu mesaj tüketirken önceliklendirilir.
Yukarıdaki örnekte, varsayılan olarak Öncelik türü olarak bir int'i belirliyoruz ve bazı mesajları kuyruğun içine birleştiriyoruz, ancak genellikle çok sayıda mesaj olur ve aynı öncelikli durumlar olabilir, bunları kullanabilirizzaman ve zeka federasyon öncelikli tip olarakAşağıdaki örneğe başvurabilirsiniz:
Çıktıya bir örneği şöyledir:
Yukarıdaki sonuçlardan, öncelik durumunda önce mesajları daha kısa sürede işleyeceğimiz veya kendi ihtiyaçlarımıza göre sıralama yöntemini özelleştirip öncelik karşılaştırma mantığını özelleştirebileceğimiz görülebilir.
Rütbe
PriorityQueue, öğrenci performansının sıralaması gibi birçok sıralama uygulamasında da kullanılabilir
Aşağıdaki örnek kodu inceleyin:
Yukarıdaki liste notların bir listesidir, sadece birkaç test verisi yazın, PriorityQueue'nun UnorderedItems üzerinden verileri sıralamadan önce alabiliriz ve aynı zamanda sıraya katıldığımız sırayla (Enqueue) da bu sıra, varsayılan karşılaştırma küçük ilk olan, yani düşük puan önce olur, sonra en büyükten en küçüğüne doğru sıralamak istiyoruz, karşılaştırma yöntemini özelleştirmemiz gerekiyor.
Yukarıdaki High2LowComparer, aslında karşılaştırma sonucunun tersi olan özel bir karşılaştırmadır ve kod şöyledir:
Yukarıdaki çıktı şöyledir:
Daha
Redis'te benzer şeyler yapabilen bir zset(sortedSet) türü veri var, ancak zset ile PriorityQueue arasında hâlâ bazı farklar var, zset bir küme, otomatik olarak deduplicate edilen bir koleksiyon, PriorityQueue ise hâlâ bir Queue deduplicated edilmeyecek, zset ilgili öğenin önceliğini (puanını) değiştirebilir, ancak PriorityQueue Şu anda, bir elemanın karşılık gelen önceliğini değiştirmek desteklenmemektedir
PriorityQueue bazı sorunlarımızı çözebilir, ancak kullanırken aklınızda tutulması gereken birkaç şey var:
- Öncelikle, öncelik aynıysa, çıktının sırası farklı olabilir, bu da iç uygulama algoritması tarafından belirlenir ve bu sıralama kesin olarak garanti edilemez
- PriorityQueue iş parçacığı güvenli değildir ve iş parçacığı güvenli sorunlara dikkat edilmelidir
- PriorityQueue'daki Peek yöntemi sadece kuyruğun içindeki yaklaşan öğeyi getirir, ancak onu kuyruğun içinden çıkarmaz
(Son) |
Önceki:Douyin Mall tarayıcı analizi, 6 tanrı pozisyonu, risk kontrol analizi, şimdi 7 tanrı olmalı X-PerseusÖnümüzdeki:EBPF ile ilgili bilgiye bağlantılar
|