我正在编写一些代码,这些代码将使用NSMutableArray并在其中存储int值,包含在NSNumbers中。
我想确认使用具有相同值的新NSNumber查询iOS NSArray或NSMutableArray是合法的,如果我需要显式迭代数组,并检查每个int值是否相等到我想要测试的价值?
这似乎有效:
NSMutableArray* walkableTiles = [NSMutableArray array];
[walkableTiles addObject:@(1)];
[walkableTiles addObject:@(2)];
[walkableTiles addObject:@(3)];
if([walkableTiles containsObject:@(1)])
{
DLog(@"contains 1"); //test passes
}
if([walkableTiles containsObject:[NSNumber numberWithFloat:2.0]])
{
DLog(@"contains 2");//test passes
}
if([walkableTiles containsObject:[NSNumber numberWithInt:3]])
{
DLog(@"contains 3");//test passes
}
答案 0 :(得分:16)
你做得很好。为什么不呢?
containsObject:
方法实际上遍历数组,并在传入要检查的对象的每个对象上调用isEqual:
方法。
顺便说一句 - 这里没有什么特别的使用NSNumber
。对于任何对象类型的数组都是一样的。只要对象的类具有有效的isEqual:
方法,它就可以工作。
答案 1 :(得分:2)
根据Apple's NSNumber documentation,您应该使用isEqualToNumber
:
isEqualToNumber:返回一个布尔值,指示是否 接收器和给定数量是相等的。 - (BOOL)isEqualToNumber:(NSNumber *)aNumber