Junior — Middle
Ako Swift rozpoznáva rozdiel medzi dvoma objektmi pri kolízii hashov?
sobes.tech AI
Odpoveď od AI
V Swift-e sa na porovnanie objektov a riešenie kolízií hashov sa používa metóda isEqual(_:). Keď majú dva objekty rovnaký hash (kolízia), systém dodatočne volá túto metódu, aby overil, či sú objekty naozaj rovnaké.
Proces:
- Hash objektu sa vypočíta pomocou
hash(into:). - Ak majú dva objekty rovnaký hash, volá sa
isEqual(_:)na presné porovnanie. - Ak
isEqual(_:)vrátitrue, objekty sa považujú za rovnaké, inak za odlišné.
Toto umožňuje správnu prácu s kolekciami ako Set alebo kľúčmi v slovníkoch, aj pri kolíziách hashov.
Príklad implementácie:
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
}
}
Tu, ak majú dva objekty Person rovnaký hash (napríklad, rovnaký id), bude volaný operátor == na finálne porovnanie.