Objective c NSMutableSet允许添加具有相同哈希的多个对象
我有一个NSObject子类,在其中我实现了Objective c NSMutableSet允许添加具有相同哈希的多个对象,objective-c,Objective C,我有一个NSObject子类,在其中我实现了isEqual:和hash方法,用于测试目的: - (BOOL)isEqual:(id)anObject { return YES; } - (NSUInteger)hash { return 1; } 出于某种原因,我可以将此类的多个对象添加到NSMutableSet,即使它们是“相同的”。有没有什么理由这不起作用 更新:原来我是在给NSMutableSet类型的ivar分配一个NSMutableArray实例。哦 addObj
isEqual:
和hash
方法,用于测试目的:
- (BOOL)isEqual:(id)anObject {
return YES;
}
- (NSUInteger)hash {
return 1;
}
出于某种原因,我可以将此类的多个对象添加到NSMutableSet,即使它们是“相同的”。有没有什么理由这不起作用
更新:原来我是在给NSMutableSet类型的ivar分配一个NSMutableArray实例。哦 addObject方法返回
void
,不提供关于项目是否实际“添加”的反馈
-(void)addObject:(id)object
是否枚举集合以确定对象“添加了两次”?否则,是什么让你相信他们是
如果两个集合与unionSet
联合在一起,如果两个集合包含相同的对象,是否会发生错误?或者结果应该仅仅包含两个原始集合包含的相同对象吗
如果您要合并一组恰好包含一个项目的集合,该怎么办?因为如果你同意上面的话,你就会明白我为什么说下面的话
我认为它只是默默地吞下了第二次添加对象的尝试(它应该是这样的)并继续生活。你的代码中肯定还有其他地方做得不对,因为你在OP中显示的重写方法会导致
NSMutableSet
将我的对象识别为相同的:
测试h:
#import "Foundation/Foundation.h"
@interface Test : NSObject
@end
测试m:
#import "Test.h"
@implementation Test
- (BOOL)isEqual:(id)anObject {
return YES;
}
- (NSUInteger)hash {
return 1;
}
@end
主要条款c:
#include <CoreFoundation/CoreFoundation.h>
#import "Test.h"
int main (int argc, const char * argv[]) {
Test *t1 = [[Test alloc] init];
Test *t2 = [[Test alloc] init];
Test *t3 = [[Test alloc] init];
Test *t4 = [[Test alloc] init];
NSSet *s = [NSMutableSet setWithObjects:t1, t2, t3, t4, nil];
NSLog(@"%lu", s.count);
return 0;
}
#包括
#导入“Test.h”
int main(int argc,const char*argv[]{
Test*t1=[[Test alloc]init];
Test*t2=[[Test alloc]init];
Test*t3=[[Test alloc]init];
测试*t4=[[Test alloc]init];
NSSet*s=[NSMutableSet setWithObjects:t1、t2、t3、t4、nil];
NSLog(@“%lu”,s.count);
返回0;
}
此代码段按预期生成
1
。添加相同的对象不会导致错误,只是不会更改集合。