2

我正在学习 iOS swift Tetris 教程* 并完成并运行。但我对一个特定的方面感到困惑——Hashable 协议。功能:

class Block: Hashable, Printable {
    [...]    
    var hashValue: Int { return self.column ^ self.row }

行数为 0..9,列数为 0..20。注释说这个函数“我们返回我们的行和列属性的异或来为每个块生成一个唯一的整数。”。但我的理解是 0^1 与 1^0 相同,等等......我想知道如果哈希函数不是这样唯一的,或者碰撞通常是可以的,这是否是一个问题?正如我所说,该应用程序似乎工作正常......

* https://www.bloc.io/tutorials/swiftris-build-your-first-ios-game-with-swift#!/chapters/681

4

2 回答 2

1

该应用程序正在运行,因为它还实现了 Equatable 协议:

func ==(lhs: Block, rhs: Block) -> Bool {
    return lhs.column == rhs.column && lhs.row == rhs.row && lhs.color.rawValue == rhs.color.rawValue
}
于 2016-07-03T10:34:35.757 回答
0

碰撞不是“通常可以”。基本假设是 的哈希x值是y当且仅当的哈希值x == y。如果您认为第 2 列第 1 行与第 1 列第 2 行相同,那么很好。但我认为你不会!该应用程序可能看起来可以工作,但大概您还没有做任何需要哈希处理的事情。

于 2015-01-14T23:23:15.250 回答