Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 221|Jawab: 1

[Sumber] . Antrean prioritas PriorityQueue di NET6

[Salin tautan]
Dipaparkan pada 2025-10-20 10:02:53 | | | |
.NET 6 memperkenalkan jenis koleksi baru, PriorityQueue, yang, seperti namanya, menambahkan dukungan prioritas di atas Queue biasa. Catatan: Dia adalahTidak aman untuk ulir, Anda perlu memperhatikan masalah keamanan benang.

Sumber:Login hyperlink terlihat.

Memulai

Mari kita lihat contoh penggunaan sederhana:
Contoh keluaran:



Anda dapat melihat bahwa urutan output berlawanan dengan urutan yang kita tambahkan, PriorityQueue dimulai dengan prioritas terkecil saat dequeue, semakin kecil nilainya, semakin tinggi prioritasnya, semakin tinggi prioritasnya, semakin tinggi prioritasnya, semakin banyak prioritas outputnya, jika kita menginginkan output maksimum terlebih dahulu, tidak apa-apa, jawabannya ya, tetapi kita perlu menentukan aturan perbandingan prioritas kita sendiri, Anda dapat merujuk ke contoh berikut

Adegan

Dengan penyortiran otomatis dengan prioritas, kita dapat mempertimbangkan untuk menggunakan PriorityQueue saat kita perlu melakukan beberapa penyortiran otomatis

Antrean Pesan

Dengan PriorityQueue, antrean pesan prioritas dapat diterapkan, memungkinkan pengguna untuk menentukan prioritas pesan saat mengirim pesan, dan akan diprioritaskan saat mengkonsumsi.

Dalam contoh di atas, kita menentukan int sebagai jenis Prioritas secara default, dan menggabungkan beberapa pesan ke dalam antrean, tetapi seringkali ada banyak pesan, dan mungkin ada situasi dengan prioritas yang sama, yang dapat kita gunakantime dan int sebagai jenis prioritas federasiAnda dapat merujuk ke contoh berikut:
Contoh outputnya adalah sebagai berikut:



Dari hasil di atas, dapat dilihat bahwa dalam kasus prioritas, pertama-tama kita akan memproses pesan dengan waktu yang lebih sedikit, atau kita dapat menyesuaikan metode penyortiran sesuai dengan kebutuhan kita sendiri, dan menyesuaikan logika perbandingan prioritas.

Pangkat

PriorityQueue juga dapat digunakan di banyak aplikasi peringkat, seperti peringkat kinerja siswa

Lihatlah contoh kode di bawah ini:
Daftar di atas adalah daftar nilai, cukup tulis beberapa data pengujian, melalui UnorderedItems PriorityQueue kita bisa mendapatkan data sebelum mengurutkan, dan itu juga urutan di mana kita bergabung dengan antrean (Enqueue), perbandingan default adalah yang kecil terlebih dahulu, yaitu skor rendah adalah yang pertama, kemudian kita ingin mengurutkan dari yang terbesar ke yang terkecil kita perlu menyesuaikan metode perbandingan.

High2LowComparer di atas adalah perbandingan khusus, yang sebenarnya merupakan kebalikan dari hasil perbandingan, dan kodenya adalah sebagai berikut:
Output di atas adalah sebagai berikut:



Lebih

Ada jenis data zset(sortedSet) di Redis yang dapat melakukan hal serupa, tetapi masih ada beberapa perbedaan antara zset dan PriorityQueue, zset adalah set, kumpulan yang secara otomatis dideduplikasi, sementara PriorityQueue masih Queue tidak akan dideduplikasi, zset dapat memodifikasi priority(score) dari elemen yang sesuai, tetapi PriorityQueue Saat ini, tidak didukung untuk mengubah prioritas elemen yang sesuai

PriorityQueue dapat memecahkan beberapa masalah kita, tetapi ada beberapa hal yang perlu diingat saat menggunakannya:

  • Pertama-tama, jika prioritasnya sama, urutan keluaran mungkin berbeda, yang ditentukan oleh algoritma implementasi internalnya, dan urutannya tidak dapat dijamin secara ketat
  • PriorityQueue tidak aman untuk utas, dan masalah aman utas perlu dicatat
  • Metode Peek di PriorityQueue hanya akan mengambil elemen yang akan datang dalam antrean, tetapi tidak akan menghapusnya dari antrean
(Akhir)




Mantan:Analisis perayap Douyin Mall memposisikan 6 dewa, analisis pengendalian risiko, sekarang harus menjadi 7 dewa X-Perseus
Depan:Tautan ke pengetahuan terkait EBPF
 Tuan tanah| Dipaparkan pada 2025-10-20 10:09:05 |
Skenario aplikasi umum

Panggilan darurat rumah sakit, sistem penjadwalan tugas, misalnya: panggilan prioritas untuk pasien yang sakit kritis, kodenya adalah sebagai berikut:
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com