Middle
Cosa bisogna fare affinché la struttura utente diventi una chiave nel dizionario?
sobes.tech AI
Risposta dell'AI
È necessario implementare il protocollo Hashable.
Il protocollo Hashable eredita da Equatable.
Equatable: Richiede l'implementazione dell'operatore di uguaglianza==per confrontare due istanze di una struttura.Hashable: Richiede l'implementazione della proprietàhash(into:), che calcola il valore hash per un'istanza della struttura.
Esempio di implementazione:
struct Coordinate: Hashable {
let x: Int
let y: Int
// MARK: - Equatable
static func == (lhs: Coordinate, rhs: Coordinate) -> Bool {
return lhs.x == rhs.x && lhs.y == rhs.y
}
// MARK: - Hashable
func hash(into hasher: inout Hasher) {
hasher.combine(x)
hasher.combine(y)
}
}
// Utilizzo in un dizionario
let coordinatesDictionary: [Coordinate: String] = [
Coordinate(x: 0, y: 0): "Origin",
Coordinate(x: 1, y: 1): "Point (1,1)"
]
print(coordinatesDictionary[Coordinate(x: 0, y: 0)]!)
Hasher viene usato per generare il valore hash. Il metodo combine accetta vari valori hashabili e li combina per creare l'hash finale.