NSNumbers的NSSet - 成员方法总是为零

hal*_*zak 6 contains objective-c nsnumber nsset


我想有一个简单的NSSet,它加载了一些NSNumbers,然后找出这些数字是否已经添加到集合中.当我这样做:

NSMutableSet *set = [[NSMutableSet alloc] init];
NSNumber *num1 = [NSNumber numberWithInt:5];
NSNumber *num2 = [NSNumber numberWithInt:5];
[set addObject:num1];
if([set member:num2]){
   // something...
}
Run Code Online (Sandbox Code Playgroud)

问题是成员总是返回nil(如果为false),即使这些数字相同.isEqual方法返回true.所以

if([num1 isEqual:num2]){
   // correct
}
Run Code Online (Sandbox Code Playgroud)

工作...
在文档中我读到成员方法使用isEqual所以我不知道问题是什么...感谢任何建议.

ari*_*orf 5

使用NSArray时,需要比较值而不是对象本身.您可以使用NSMutableIndexSet,而不是使用NSArray.这允许您将这些值与少几步进行比较.

//during init, add some numbers
NSMutableIndexSet *tSet = [[NSMutableIndexSet alloc] init];
NSUInteger exampleValue = 7;
[tSet addIndex:exampleValue];
exampleValue = 42;
[tSet addIndex:exampleValue];

//...later on
//look to see if numbers are there
if ([tSet containsIndex:7]){
    NSLog(@"7 exists!");
}
if ([tSet containsIndex:8]){
    NSLog(@"8 exists!");
}
Run Code Online (Sandbox Code Playgroud)

输出:7存在!


das*_*dom 2

问题是,您正在检查num1和是否num2是同一个对象。但事实并非如此。它们只是具有相同的值,但它们是具有相同值的两个不同对象。

所以你要检查的member是它们在内存中是否有相同的地址。

编辑:您应该用来compare检查数字的值是否相同!