objective ios objective-c search nsmutablearray nsarray

objective - iOS ¿cómo comprueba NSMutableArray si contiene objetos NSNumber?



nspredicate objective c (2)

Estoy escribiendo un código que usará NSMutableArray y que almacenará los valores int dentro de él, incluido en NSNumbers.

Me gustaría confirmar que consultar un NSArray de iOS o NSMutableArray usando NSNumbers nuevos con los mismos valores es legal , de si necesito iterar explícitamente sobre el arreglo, y verificar si cada valor int es igual al valor con el que quiero probar.

Esto parece funcionar:

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 }


Lo que estás haciendo está bien. ¿Por qué no sería?

El método containsObject: realidad itera sobre la matriz y llama al método isEqual: en cada objeto que pasa en el objeto que está buscando.

Por cierto, aquí no hay nada especial acerca de usar NSNumber . Es lo mismo con una matriz de cualquier tipo de objeto. Siempre que la clase del objeto tenga un método isEqual: válido, funcionará.


Según la documentación de NSNumber de Apple , debe usar isEqualToNumber :

isEqualToNumber: devuelve un valor booleano que indica si el receptor y un número determinado son iguales. - (BOOL) isEqualToNumber: (NSNumber *) aNumber