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

  1. Hash objektu sa vypočíta pomocou hash(into:).
  2. Ak majú dva objekty rovnaký hash, volá sa isEqual(_:) na presné porovnanie.
  3. Ak isEqual(_:) vráti true, 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.