Sobes.tech
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:

  1. Objekta hash tiek aprēķināts ar hash(into:).
  2. Ja diviem objektiem ir vienāds hash, tiek izsaukts isEqual(_:) precīzai salīdzināšanai.
  3. 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.