Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 221|Yanıt: 1

[Kaynak] . NET6'da PriorityQueue öncelik kuyruğu

[Bağlantıyı kopyala]
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
 Ev sahibi| 2025-10-20 10:09:05 tarihinde yayınlandı |
Tipik uygulama senaryoları

Hastane acil arama, görev planlama sistemi, örneğin: kritik hastalar için öncelikli arama, kod şu şekildedir:
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com