Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS how does NSMutableArray check if it contains NSNumber objects?

I'm writing some code that will be using NSMutableArray and storing int values within it, wrapped within NSNumbers.

I would like to confirm that querying an iOS NSArray or NSMutableArray using new NSNumbers with same values is legal, of if I need to explicitly iterate over the array, and check if each int value is equal to the value I want to test against?

This appears to work:

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
}
like image 602
Alex Stone Avatar asked Dec 12 '13 16:12

Alex Stone


2 Answers

What you are doing is fine. Why wouldn't it be?

The containsObject: method actually iterates over the array and calls the isEqual: method on each object passing in the object you are checking for.

BTW - there is nothing special here about using NSNumber. It's the same with an array of any object type. As long as the object's class has a valid isEqual: method, it will work.

like image 95
rmaddy Avatar answered Oct 22 '22 05:10

rmaddy


Per the Apple's NSNumber documentation, you should use isEqualToNumber:

isEqualToNumber: Returns a Boolean value that indicates whether the receiver and a given number are equal. - (BOOL)isEqualToNumber:(NSNumber *)aNumber

like image 43
Rufel Avatar answered Oct 22 '22 04:10

Rufel