我在Objective-C / Cocoa工作,我有一个对象类型Tile
。每个都有一个签名,可以表示为4个不同的整数值。如果我输出一些这些值作为字符串,-
es分隔值,它看起来像这样:
signature: 4-4-3-3
signature: 4-3-3-3
signature: 0-0-0-1
signature: 0-0-1-1
signature: 0-0-1-0
signature: 1-1-1-2
signature: 1-1-2-2
signature: 1-1-2-1
signature: 3-3-3-1
signature: 3-3-1-1
signature: 3-3-1-3
signature: 4-4-4-3
signature: 4-4-3-3
我目前正在将每个值存储为unsigned short
。永远不会有负值,最大值不可能超过15左右。零是有效值。没有'零'价值。
我希望能够致电:
[myTile signature]
检索值。
[myTile matches:otherTile]
返回BOOL
,表示签名是否匹配。
存储此“签名”并将其与其他Tile
实例的签名进行比较的最有效方法是什么?看起来字符串比较会很慢......
答案 0 :(得分:3)
首先,我会使用常用的方法名称执行这些任务:description
和isEqual*:
。
关于你的问题,我认为最好的方法是更简单:
- (BOOL)isEqualToTile:(Tile)tile
{
return self.value1 == tile.value1 &&
self.value2 == tile.value2 &&
self.value3 == tile.value3 &&
self.value4 == tile.value4;
}
另一种可能性是实施hash
。
1.5E-8s
才能运行。这对我来说并不多,但我只想说如果我的数学算法合适,你可以在100毫秒内完成10,000,000次比较。hash
函数。不要过度思考它。见我的第二点。