对于具有两个字符串和两个BOOL的对象,什么是好的哈希?

时间:2014-06-02 13:38:17

标签: objective-c hashcode equality

对于具有两个字符串和两个BOOL的类,有什么好的哈希值?

e.g。

@interface Person : NSObject

@property (nonatomic, copy) NSString *identifier;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) BOOL hasSpecialAbility;
@property (nonatomic, assign) BOOL hasEmotion;

- (BOOL)isEqualToPerson:(Person *)person;

@end

- (NSUInteger)hash {
  // Is this good or should I skip the BOOLs?
  return identifier.hash ^ name.hash ^ hasSpecialAbility ^ hasEmotion;
}

- (BOOL)isEqual:(id)object {
  ...
}

- (BOOL)isEqualToPerson:(Person *)person {
 ...
}

1 个答案:

答案 0 :(得分:0)

如果r1r2等是不匹配的随机数,那么我通常会使用以下内容:

(bool1 ? r1 : r2) ^
(bool2 ? r3 : r4)

...理由是采用更统一的方法可能导致任何混合对象容器中不同类的实例之间的哈希冲突,并且任何可以节省额外调用isEqual:的东西都是值得的