Хеш-значение массива, содержащего структуры - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть структура под названием Survey. Он соответствует протоколам Equatable и Hashable.

import Foundation

public struct Survey {
    public let id: String
    public let createdAt: Date
    public let updatedAt: Date
    public let title: String
    public let type: String
}

extension Survey: Equatable { }

public func ==(lhs: Survey, rhs: Survey) -> Bool {
    return lhs.id == rhs.id && lhs.createdAt == rhs.createdAt && lhs.updatedAt == rhs.updatedAt && lhs.title == rhs.title && lhs.type == rhs.type
}

extension Survey: Hashable {
    public var hashValue: Int {
        return id.hashValue ^ createdAt.hashValue ^ updatedAt.hashValue ^ title.hashValue ^ type.hashValue
    }
}

Я могу получить хеш-значение отдельных Survey объектов.

Но как мне получить хеш-значение массива, содержащего несколько Survey объектов?

1 Ответ

0 голосов
/ 27 апреля 2018

Может как то так?

extension Array: Hashable where Iterator.Element: Hashable {
    public var hashValue: Int {
        return self.reduce(1, { $0.hashValue ^ $1.hashValue })
    }
}

Пользовательское значение хеша - это просто значение, которое вы в любом случае определяете

* Редактировать: Это также будет работать, если вы хотите Hashable для Survey массив

extension Array: Hashable where Element == Survey {
    public var hashValue: Int {
        return self.reduce(1, { $0.hashValue ^ $1.hashValue })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...