我想要一个包含两个Hashable相关类型的枚举的枚举,每个都符合Hashable,如下所示:
enum WordOrNumber {
case Word(String)
case Number(Int)
}
我对哈希的第一个想法如下:
extension WordOrNumber: Hashable {
var hashValue: Int {
switch self {
case let .Word(word):
return word.hashValue & ~1 // ends in 0
case let .Number(number):
return number.hashValue | 1 // ends in 1
}
}
}
我不确定的是,这将如何与Swift的字典和集合实现中的存储桶进行交互。
用LSB或MSB区分这两种情况,或者在中间某处区分这种情况会更好吗?
我认为将hashValues向左移动一个然后再加1是没有任何区别,但我有兴趣知道这是不是这样。
编辑: 我刚测试了这个,看起来Int的hashValue就是值本身。这显然是一个问题,因为你经常连续得到一些内容,比如枚举Bla:Int {}。所以我的新的和改进的(?)hashValue是:
extension WordOrNumber: Hashable {
var hashValue: Int {
switch self {
case let .Word(word): // ends in 0
return word.hashValue << 1
case let .Number(number): // ends in 1
return number.hashValue << 1 &+ 1
}
}
}
关于LSB和MSB的上述问题仍然存在。
答案 0 :(得分:1)
有类似的东西:
.html
......应该够了。