假设我使用-isEqual:
方法:
- (BOOL)isEqual:(MyObject*)aObject {
if (![aObject isKindOfClass:[MyObject class]]) {
return NO;
}
return ([self.dateString isEqualToString:aObject.dateString] || [self.date isEqual:aObject.date]) &&
((!self.title && !aObject.title) || [self.title isEqualToString:aObject.title]);
}
如果date
或dateString
相等且title
相等,则认为两个对象相等。我们假设date
和dateString
一定不能为零,否则我们也必须检查它。我们进一步假设,date
和dateString
之间没有已知关系。
如何以满足两个相等对象必须具有相同哈希的要求的方式实现相应的-hash
方法?
我尝试按照great algorithm来实现它,但是我很难将两个日期的OR条件转换为适当的哈希方法。
(不可否认,这个问题在某种程度上是学术性的,因为人们可以质疑这种平等是否确实有意义。因为我有兴趣找到一个通用的解决方案,请不要发表答案我应该改变我的{{1除了可以正式证明没有合适的isEqual:
方法可以存在。)
答案 0 :(得分:1)
您将仅基于标题创建哈希值,完全忽略date和dateString。
- (NSUInteger)hash
{
return self.title.hash
}
这将确保相等的对象始终具有相同的哈希值。具有相同散列的对象不需要相等。