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

objective-c – 如何为-isEqual实现-hash:使用OR条件?,第1张

概述假设我有这个-isEqual:方法: - (BOOL)isEqual:(MyObject*)aObject { if (![aObject isKindOfClass:[MyObject class]]) { return NO; } return ([self.dateString isEqualToString:aObject.dateString] 假设我有这个-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]);}

因此,如果日期或dateString相等且标题相等,则认为两个对象相等.我们假设date和dateString不能为nil,否则我们也必须检查它.我们进一步假设,date和dateString之间没有已知的关系.

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

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

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

解决方法 您将仅基于标题创建哈希值,完全忽略date和dateString.

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

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

总结

以上是内存溢出为你收集整理的objective-c – 如何为-isEqual实现-hash:使用OR条件?全部内容,希望文章能够帮你解决objective-c – 如何为-isEqual实现-hash:使用OR条件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存