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

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

[Πηγή] Το C# Distinct καταργεί υπό όρους τα διπλότυπα αντικείμενα

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 17/8/2018 10:56:00 π.μ. | | | |
Συνήθως, χρησιμοποιούμε το Distinct στη C# για την κατάργηση διπλότυπων πινάκων, γενικούς τύπους δεδομένων που βασίζονται σε πίνακες, όπως int, string. μπορεί επίσης να χρησιμοποιηθεί για αφαίρεση διπλότυπων αντικειμένων, ας ρίξουμε μια ματιά στον ορισμό της C# για τη μέθοδο Distinct:



Υπάρχει ένα βαρύ φορτίο, προστίθεται η πρώτη παράμετρος, η οποία είναι η μέθοδος επέκτασης, σχετικά με τη μέθοδο επέκτασης, παρακαλώ κατανοήστε την Baidu.
Ας μελετήσουμε την αφαίρεση διπλότυπων αντικειμένων του Distinct, ας υποθέσουμε ότι τώρα έχουμε μια κλάση People:




Δηλώνουμε μια συλλογή αντικειμένων ListPeole:

Ας χρησιμοποιήσουμε τη μέθοδο Distinct στο ListPeople χωρίς παραμέτρους και το αποτέλεσμα είναι το εξής:



Μπορεί να φανεί ότι εάν η μέθοδος Distinct δεν έχει παραμέτρους, θα καταργήσει τα p, p1, p2 στο σύνολο αντικειμένων και δεν υπάρχει κατάργηση διπλότυπων για διαφορετικά αντικείμενα με την ίδια τιμή μέλους του αντικειμένου.
Τώρα έχουμε μια απαίτηση, για άτομα με το ίδιο αναγνωριστικό, μετράμε ως το ίδιο άτομο, για την έξοδο των μη διπλότυπων ατόμων στο σύνολο (απλώς εξάγουμε ένα για το ίδιο αναγνωριστικό), αυτή τη στιγμή, χρησιμοποιούμε τη δεύτερη μέθοδο Distinct, η μέθοδος απαιτεί οι παράμετροι που μεταβιβάζονται να είναι τύπου IEqualityComparer, κληρονομώντας μια γενική διεπαφή, προσθέτουμε τον ακόλουθο κώδικα:


Κληρονομώντας τη διασύνδεση IEqualityComparer, πρέπει να εφαρμόσετε τις μεθόδους Equals και GetHashCode.
Όταν συγκρίνουμε, μπορούμε να μεταβιβάσουμε μια οντότητα με ένα PeopleCompareByID:


Τα αποτελέσματα του αγώνα έχουν ως εξής:



Έχουμε επιτύχει το αποτέλεσμα της αφαίρεσης διπλότυπων από την ταυτότητα.
Τώρα οι απαιτήσεις έχουν αλλάξει ξανά, το αναγνωριστικό και η επαρχία είναι το ίδιο πρόσωπο, για την έξοδο των πληροφοριών του ατόμου (το ίδιο μπορεί να εξάγει μία κατά βούληση), αυτή τη στιγμή, βλέπουμε ότι το ID=0 και το Province="Hubei" είναι διπλότυπα, για να το καταργήσουμε, έχουμε μια άλλη κλάση ή κληρονομούμε από το IEqualityComparer:


Ομοίως, όταν χρησιμοποιείτε τη μέθοδο Distincted, μεταβιβάζεται μια παρουσία του PeopleCompareByIDAndProvince:

Τα αποτελέσματα μετά το τρέξιμο είναι τα εξής:



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






Προηγούμενος:MYSQL:WARN: Establishing SSL connection without server's identity verificatio...
Επόμενος:C# Βαθιά κατάδυση - Καταστροφείς
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com