Sobes.tech
Middle

Ի՞նչ պետք է անել, որպեսզի օգտագործողի կառուցվածքը դառնա բառարանի բանալի։

sobes.tech AI

Պատասխան AI-ից

Անհրաժեշտ է իրականացնել Hashable պրոտոկոլը:

Hashable պրոտոկոլը ժառանգում է Equatable-ից:

  • Equatable: Պահանջում է իրականացնել հավասարության օպերատոր == երկու կառուցվածքների օրինակների համեմատության համար:
  • Hashable: Պահանջում է իրականացնել hash(into:) հատկությունը, որը հաշվարկում է կառուցվածքի օրինակի հեշ-արժեքը:

Իմպլեմենտացիայի օրինակ՝

struct Coordinate: Hashable {
    let x: Int
    let y: Int

    // MARK: - Equatable
    static func == (lhs: Coordinate, rhs: Coordinate) -> Bool {
        return lhs.x == rhs.x && lhs.y == rhs.y
    }

    // MARK: - Hashable
    func hash(into hasher: inout Hasher) {
        hasher.combine(x)
        hasher.combine(y)
    }
}

// Օգտագործում բառարանում
let coordinatesDictionary: [Coordinate: String] = [
    Coordinate(x: 0, y: 0): "Origin",
    Coordinate(x: 1, y: 1): "Point (1,1)"
]

print(coordinatesDictionary[Coordinate(x: 0, y: 0)]!)

Hasher-ը օգտագործվում է հեշ-արժեքի սերնդի համար: combine մեթոդը ընդունում է տարբեր հեշ-համատեղելի արժեքներ և միավորում դրանք՝ ստեղծելով վերջնական հեշը: