4

假设我有这个-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因此,如果ORdateString相等且 相等,则认为两个对象title相等。我们在这里假设date并且dateString不能为零,否则我们也必须检查它。date我们进一步假设和之间没有已知的关系dateString

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

我试图通过遵循这个伟大的算法来实现它,但我很难将两个日期的 OR 条件转换为适当的哈希方法。

(诚​​然,这个问题有点学术性,因为人们可以质疑这种平等是否有意义。由于我有兴趣找到一个通用的解决方案,请不要发布答案我应该改变我的isEqual:。除非它可以正式证明没有合适的-hash方法存在。)

4

1 回答 1

1

您将完全忽略日期和日期字符串,仅根据标题创建哈希值。

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

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

于 2013-01-15T17:05:42.267 回答