Назад к вопросам
Middle
114
questionbank

Что необходимо сделать, чтобы пользовательская структура стала ключом в словаре (dictionary)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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 принимает различные хэшируемые значения и объединяет их для создания окончательного хеша.