Middle
Τι πρέπει να γίνει ώστε η δομή χρήστη να γίνει κλειδί στο λεξικό;
sobes.tech AI
Απάντηση από AI
Απαιτείται η υλοποίηση του πρωτοκόλλου Hashable.
Το πρωτόκολλο Hashable κληρονομεί από το Equatable.
Equatable: Απαιτεί την υλοποίηση του τελεστή ισότητας==για τη σύγκριση δύο στιγμιότυπων μιας δομής.Hashable: Απαιτεί την υλοποίηση της ιδιότηταςhash(into:), η οποία υπολογίζει την τιμή κατακερματισμού για ένα στιγμιότυπο της δομής.
Παράδειγμα υλοποίησης:
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)
}
}
// Χρήση σε λεξικό
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 χρησιμοποιείται για τη δημιουργία της τιμής κατακερματισμού. Η μέθοδος combine δέχεται διάφορες τιμές που μπορούν να κατακερματιστούν και τις συνδυάζει για να δημιουργήσει το τελικό hash.