Sobes.tech
Junior — Middle

Πώς καθορίζει η Swift τη διαφορά μεταξύ δύο αντικειμένων σε περίπτωση σύγκρουσης κατακερματισμού;

sobes.tech AI

Απάντηση από AI

Στο Swift, η μέθοδος isEqual(_:) χρησιμοποιείται για τη σύγκριση αντικειμένων και την επίλυση συγκρούσεων κατακερματισμού (hash collisions). Όταν δύο αντικείμενα έχουν τον ίδιο hash (σύγκρουση), το σύστημα καλεί επιπλέον αυτή τη μέθοδο για να ελέγξει αν τα αντικείμενα είναι πραγματικά ίσα.

Διαδικασία:

  1. Ο υπολογισμός του hash του αντικειμένου γίνεται μέσω του hash(into:).
  2. Αν δύο αντικείμενα έχουν τον ίδιο hash, καλείται η isEqual(_:) για ακριβή σύγκριση.
  3. Αν η 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), θα κληθεί ο τελικός τελεστής == για σύγκριση.