【发布时间】:2014-07-22 15:41:27
【问题描述】:
对于具有两个字符串和两个 BOOL 的类,什么是好的散列?
例如
@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 {
...
}
【问题讨论】:
-
不聪明。四个 BOOL 组合只给出两个不同的哈希值。将所有实例变量更改为以下划线开头后,写入 ... ^ (_hasSpecialAbility
-
identifier.hash ^ name.hash ^ (hasSpecialAbility ? 1 : 0) ^ (hasEmoticon ? 2 : 0) -
@gnasher729 怎么样... ^ (hasSpecialAbility | (hasEmotion
-
一般来说,您不能保证 BOOL 是任何特定值——
YES是任何非零值。
标签: objective-c hashcode equality