Junior — Middle
Hogyan különbözteti meg a Swift két objektumot a hash ütközése esetén?
sobes.tech MI
Válasz az MI-től
Swiftben az isEqual(_:) módszert használják az objektumok összehasonlítására és a hash ütközések feloldására. Amikor két objektumnak ugyanaz a hash értéke (ütközés), a rendszer további lépésként meghívja ezt a módszert, hogy ellenőrizze, valóban egyenlőek-e az objektumok.
Folyamat:
- Az objektum hash értékét a
hash(into:)segítségével számítják ki. - Ha két objektumnak ugyanaz a hash értéke, akkor a pontos összehasonlításhoz meghívják az
isEqual(_:)-t. - Ha az
isEqual(_:)trueértéket ad vissza, az objektumokat egyenlőnek tekintik, különben különbözőek.
Ez lehetővé teszi, hogy helyesen működjön a Set vagy a szótárak kulcsai, még hash ütközések esetén is.
Implementációs példa:
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
}
}
Itt, ha két Person objektumnak ugyanaz a hash értéke (például ugyanaz az id), akkor a végső összehasonlításhoz az == operátor lesz meghívva.