Sobes.tech
Junior — Middle

Que doit-on assurer pour utiliser un objet de classe comme clé dans un dictionnaire?

sobes.tech IA

Réponse de l'IA

Pour utiliser un objet de classe comme clé dans un dictionnaire (par exemple, dans Swift Dictionary ou NSDictionary), il est nécessaire de garantir :

  1. Hashabilité — l'objet doit avoir une méthode de hachage correctement implémentée (hash en Swift, hashValue en Objective-C), afin que le dictionnaire puisse trouver la clé rapidement.

  2. Comparabilité pour l'égalité — l'objet doit implémenter correctement la méthode de comparaison (Equatable en Swift, isEqual: en Objective-C), pour que le dictionnaire puisse déterminer si deux clés sont égales.

En Swift, cela signifie que la classe doit respecter les protocoles Hashable et Equatable. Par exemple :

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"

Sans une implémentation correcte de ces méthodes, l'objet ne pourra pas être utilisé comme clé dans un dictionnaire.