Junior — Middle
Kā Swift nosaka atšķirību starp diviem objektiem, ja ir notikusi haša sadursme?
sobes.tech AI
Atbilde no AI
Swift tiek, isEqual(_:) metode tiek, lai salīdzinātu objektus un atrisinātu hash sadursmes. Kad divi objekti ir ar vienādu hash (sadursme), sistēma papildus izsauc šo metodi, lai pārbaudītu, vai objekti patiešām ir vienādi.
Process:
- Objekta hash tiek aprēķināts ar
hash(into:). - Ja diviem objektiem ir vienāds hash, tiek izsaukts
isEqual(_:)precīzai salīdzināšanai. - Ja
isEqual(_:)atgriežtrue, objekti tiek uzskatīti par vienādiem, citādi — atšķirīgi.
Tas ļauj pareizi strādāt ar kolekcijām kā Set vai atslēgām vārdnīcās, pat ja ir hash sadursmes.
Piemērs:
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
}
}
Šeit, ja diviem Person objektiem ir tas pats hash (piemēram, tas pats id), tiks izsaukts == operators galīgai salīdzināšanai.