Junior — Middle
Πώς καθορίζει η Swift τη διαφορά μεταξύ δύο αντικειμένων σε περίπτωση σύγκρουσης κατακερματισμού;
sobes.tech AI
Απάντηση από AI
Στο Swift, η μέθοδος isEqual(_:) χρησιμοποιείται για τη σύγκριση αντικειμένων και την επίλυση συγκρούσεων κατακερματισμού (hash collisions). Όταν δύο αντικείμενα έχουν τον ίδιο hash (σύγκρουση), το σύστημα καλεί επιπλέον αυτή τη μέθοδο για να ελέγξει αν τα αντικείμενα είναι πραγματικά ίσα.
Διαδικασία:
- Ο υπολογισμός του hash του αντικειμένου γίνεται μέσω του
hash(into:). - Αν δύο αντικείμενα έχουν τον ίδιο hash, καλείται η
isEqual(_:)για ακριβή σύγκριση. - Αν η
isEqual(_:)επιστρέψειtrue, τα αντικείμενα θεωρούνται ίσα, διαφορετικά — διαφορετικά.
Αυτό επιτρέπει τη σωστή εργασία με συλλογές όπως το Set ή τα κλειδιά σε λεξικά, ακόμα και σε περιπτώσεις συγκρούσεων hash.
Παράδειγμα υλοποίησης:
class Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
Εδώ, αν δύο αντικείμενα Person έχουν τον ίδιο hash (π.χ., τον ίδιο id), θα κληθεί ο τελικός τελεστής == για σύγκριση.