如何为-isEqual实现-hash:使用OR条件?

时间:2013-01-15 15:23:23

标签: objective-c cocoa equality

假设我使用-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]);
}

如果datedateString相等且title相等,则认为两个对象相等。我们假设datedateString一定不能为零,否则我们也必须检查它。我们进一步假设,datedateString之间没有已知关系。

如何以满足两个相等对象必须具有相同哈希的要求的方式实现相应的-hash方法?

我尝试按照great algorithm来实现它,但是我很难将两个日期的OR条件转换为适当的哈希方法。

(不可否认,这个问题在某种程度上是学术性的,因为人们可以质疑这种平等是否确实有意义。因为我有兴趣找到一个通用的解决方案,请不要发表答案我应该改变我的{{1除了可以正式证明没有合适的isEqual:方法可以存在。)

1 个答案:

答案 0 :(得分:1)

您将仅基于标题创建哈希值,完全忽略date和dateString。

- (NSUInteger)hash
{
    return self.title.hash
}

这将确保相等的对象始终具有相同的哈希值。具有相同散列的对象不需要相等。