包含结构的数组的哈希值

时间:2018-04-27 11:03:34

标签: ios arrays swift hash

我有一个名为Survey的结构。它符合EquatableHashable协议。

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 :(得分:2)

也许是这样的?

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 })
    }
}