2022-09-16

2016-08-23  本文已影响36人  时间戳

swift使用对象类型作为Dictionary的key

使用值类型作为Dictionary的key, 如果使用引用类型,引用类型的修改会导致key的修改
作为key的类型要遵循 Hashable, Equatable 两个协议

struct Account {
var type: Int
var alias: String
var createAt: Double

// 减少hash碰撞
let INT_BIT = (Int)(CHAR_BIT) * MemoryLayout<Int>.size
func bitwiseRotate(value: Int, bits: Int) -> Int {
    return (value << bits) | (value >> (INT_BIT - bits))
}

}

extension Account: Hashable, Equatable {
var hashValue: Int {
return bitwiseRotate(value: type.hashValue, bits: 10) ^ alias.hashValue ^ createAt.hashValue
}

static func == (lhs: Account, rhs: Account) -> Bool {
    return lhs.alias == rhs.alias && lhs.type == rhs.type && lhs.createAt == rhs.createAt
}

}

上一篇下一篇

猜你喜欢

热点阅读