Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 221|Απάντηση: 1

[Πηγή] . Ουρά προτεραιότητας PriorityQueue στο NET6

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2025-10-20 10:02:53 | | | |
Το .NET 6 εισάγει έναν νέο τύπο συλλογής, το PriorityQueue, το οποίο, όπως υποδηλώνει το όνομά του, προσθέτει υποστήριξη προτεραιότητας πάνω από το συνηθισμένο Queue. Σημείωση: ΕίναιΜη ασφαλές για νήματα, πρέπει να δώσετε προσοχή σε θέματα ασφάλειας νημάτων.

Πηγή:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Ξεκινήσετε

Ας ρίξουμε μια ματιά σε ένα απλό παράδειγμα χρήσης:
Παράδειγμα εξόδου:



Μπορείτε να δείτε ότι η σειρά εξόδου είναι αντίθετη από τη σειρά που προσθέσαμε, το PriorityQueue ξεκινά με τη μικρότερη προτεραιότητα κατά την ουρά, όσο μικρότερη είναι η τιμή, τόσο μεγαλύτερη είναι η προτεραιότητα, τόσο μεγαλύτερη είναι η προτεραιότητα, τόσο μεγαλύτερη είναι η προτεραιότητα, τόσο μεγαλύτερη προτεραιότητα είναι η έξοδος, αν θέλουμε πρώτα τη μέγιστη έξοδο, είναι εντάξει, η απάντηση είναι ναι, αλλά πρέπει να καθορίσουμε τους δικούς μας κανόνες σύγκρισης προτεραιότητας, μπορείτε να ανατρέξετε στο παρακάτω παράδειγμα

Σκηνές

Με την αυτόματη ταξινόμηση με προτεραιότητα, μπορούμε να εξετάσουμε το ενδεχόμενο να χρησιμοποιήσουμε το PriorityQueue όταν χρειάζεται να κάνουμε κάποια αυτόματη ταξινόμηση

Ουρά μηνυμάτων

Με το PriorityQueue, μπορεί να εφαρμοστεί μια ουρά μηνυμάτων προτεραιότητας, η οποία επιτρέπει στους χρήστες να καθορίζουν την προτεραιότητα ενός μηνύματος κατά την αποστολή ενός μηνύματος και θα έχει προτεραιότητα κατά την κατανάλωση.

Στο παραπάνω παράδειγμα, καθορίζουμε ένα int ως τον τύπο προτεραιότητας από προεπιλογή και συγχωνεύουμε ορισμένα μηνύματα στην ουρά, αλλά συχνά υπάρχουν πολλά μηνύματα και μπορεί να υπάρχουν καταστάσεις με την ίδια προτεραιότητα, τις οποίες μπορούμε να χρησιμοποιήσουμεΧρόνος και INT ως ομοσπονδιακός τύπος προτεραιότηταςΜπορείτε να ανατρέξετε στο ακόλουθο παράδειγμα:
Ένα παράδειγμα της εξόδου είναι το εξής:



Από τα παραπάνω αποτελέσματα, φαίνεται ότι στην περίπτωση προτεραιότητας, θα επεξεργαστούμε πρώτα τα μηνύματα με λιγότερο χρόνο ή μπορούμε να προσαρμόσουμε τη μέθοδο ταξινόμησης σύμφωνα με τις δικές μας ανάγκες και να προσαρμόσουμε τη λογική σύγκρισης προτεραιότητας.

Βαθμός

Το PriorityQueue μπορεί επίσης να χρησιμοποιηθεί σε πολλές εφαρμογές κατάταξης, όπως η κατάταξη της απόδοσης των μαθητών

Ρίξτε μια ματιά στο παρακάτω παράδειγμα κώδικα:
Η παραπάνω λίστα είναι μια λίστα βαθμών, απλώς γράψτε μερικά δεδομένα δοκιμής, μέσω του PriorityQueue's UnorderedItems μπορούμε να λάβουμε τα δεδομένα πριν από την ταξινόμηση και είναι επίσης η σειρά με την οποία μπαίνουμε στην ουρά (Enqueue), η προεπιλεγμένη σύγκριση είναι η μικρή πρώτα, δηλαδή η χαμηλή βαθμολογία είναι πρώτα, μετά θέλουμε να ταξινομήσουμε από το μεγαλύτερο στο μικρότερο πρέπει να προσαρμόσουμε τη μέθοδο σύγκρισης.

Το παραπάνω High2LowComparer είναι μια προσαρμοσμένη σύγκριση, η οποία είναι στην πραγματικότητα το αντίστροφο του αποτελέσματος σύγκρισης και ο κώδικας έχει ως εξής:
Η παραπάνω έξοδος έχει ως εξής:



Περισσότερο

Υπάρχει ένας τύπος δεδομένων zset (sortedSet) στο Redis που μπορεί να κάνει παρόμοια πράγματα, αλλά εξακολουθούν να υπάρχουν κάποιες διαφορές μεταξύ του zset και του PriorityQueue, το zset είναι ένα σύνολο, μια συλλογή που καταργεί αυτόματα τα διπλότυπα, ενώ το PriorityQueue εξακολουθεί να είναι μια ουρά δεν θα καταργηθεί διπλότυπα, το zset μπορεί να τροποποιήσει την προτεραιότητα (βαθμολογία) του αντίστοιχου στοιχείου, αλλά το PriorityQueue Προς το παρόν, δεν υποστηρίζεται η τροποποίηση της αντίστοιχης προτεραιότητας ενός στοιχείου

Το PriorityQueue μπορεί να λύσει ορισμένα από τα προβλήματά μας, αλλά υπάρχουν μερικά πράγματα που πρέπει να έχετε κατά νου όταν το χρησιμοποιείτε:

  • Πρώτα απ 'όλα, εάν η προτεραιότητα είναι η ίδια, η σειρά της εξόδου μπορεί να είναι διαφορετική, η οποία καθορίζεται από τον εσωτερικό αλγόριθμο υλοποίησης και η σειρά δεν μπορεί να είναι αυστηρά εγγυημένη
  • Το PriorityQueue δεν είναι ασφαλές για νήματα και πρέπει να σημειωθούν ζητήματα που είναι ασφαλή για νήματα
  • Η μέθοδος Peek στο PriorityQueue θα ανακτήσει μόνο το επερχόμενο στοιχείο στην ουρά, αλλά δεν θα το αφαιρέσει από την ουρά
(Τέλος)




Προηγούμενος:Ανάλυση ερπυστριοφόρου Douyin Mall τοποθέτηση 6 θεών, ανάλυση ελέγχου κινδύνου, τώρα θα πρέπει να είναι 7 θεοί X-Perseus
Επόμενος:Σύνδεσμοι με γνώσεις που σχετίζονται με το EBPF
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2025-10-20 10:09:05 |
Τυπικά σενάρια εφαρμογής

Κλήση έκτακτης ανάγκης νοσοκομείου, σύστημα προγραμματισμού εργασιών, για παράδειγμα: κλήση προτεραιότητας για βαρέως πάσχοντες ασθενείς, ο κωδικός έχει ως εξής:
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com