Sobes.tech
Junior — Middle

Τι πρέπει να διασφαλιστεί για τη χρήση ενός αντικειμένου κλάσης ως κλειδί σε ένα λεξικό;

sobes.tech AI

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

Για να χρησιμοποιήσετε ένα αντικείμενο κλάσης ως κλειδί σε ένα λεξικό (π.χ., στο Swift Dictionary ή NSDictionary), πρέπει να διασφαλίσετε:

  1. Hashability — το αντικείμενο πρέπει να έχει μια σωστά υλοποιημένη μέθοδο κατακερματισμού (hash στο Swift, hashValue στο Objective-C), ώστε το λεξικό να μπορεί να βρει γρήγορα το κλειδί.

  2. Συγκρισιμότητα για ισότητα — το αντικείμενο πρέπει να υλοποιεί σωστά τη μέθοδο σύγκρισης (Equatable στο Swift, isEqual: στο Objective-C), ώστε το λεξικό να μπορεί να καθορίσει αν δύο κλειδιά είναι ίσα.

Στο Swift, αυτό σημαίνει ότι η κλάση πρέπει να συμμορφώνεται με τα πρωτόκολλα Hashable και Equatable. Για παράδειγμα:

class Person: Hashable {
    var id: Int
    var name: String

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

var dict: [Person: String] = [:]
dict[Person(id: 1, name: "Alice")] = "Developer"

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