Sobes.tech
Junior — Middle

Milyen korlátozások és követelmények vannak az objektumokra vonatkozóan, hogy használhatók legyenek hash-táblák vagy hash-struktúrák elemeként Swiftben?

sobes.tech MI

Válasz az MI-től

Swiftben, hogy egy objektum hash-táblázat elemként használható legyen (például kulcsként szótárban vagy halmaz elemként), meg kell felelnie a Hashable protokollnak.

Elvárások:

  • Az objektumnak implementálnia kell a hash(into:) metódust, amely a tulajdonságértékeket kombinálva számítja ki a hash-t.
  • Az objektumnak implementálnia kell az == egyenlőség operátort (a Equatable protokollt), hogy helyesen össze tudja hasonlítani az elemeket.

Példa:

struct Person: Hashable {
    var id: Int
    var name: String

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }
}

var peopleSet = Set<Person>()
peopleSet.insert(Person(id: 1, name: "Иван"))

Ezért az objektumoknak stabil és helyesen implementált hash- és összehasonlítási módszerekkel kell rendelkezniük, hogy helyesen működjenek hash-struktúrákban.