2011-05-26 14 views
8

¿Es posible en un NSArray averiguar si un valor dado existe o no en la matriz (sin buscarlo usando un ciclo for)? Cualquier método aleatorio predeterminado. Pasé por el documentation, pero no encontré mucho relevante.Buscar el índice de un NSArray pasando el valor

Por favor, cuénteme también sobre el método valueForKey (no pude obtenerlo del documento).

Respuesta

10

El método containsObject: por lo general le lo que está pidiendo dar -, mientras que su nombre suena como que está consultando para una instancia específica (es decir, dos objetos con el mismo valor semántico no coinciden) en realidad invoca isEqual: en los objetos por lo que se prueba por valor.

Si quiere el índice del artículo, como sugiere su título, use indexOfObject:, también invoca isEqual: para encontrar la coincidencia.

valueForKey: es para cuando tiene una variedad de diccionarios; busca la clave en cada diccionario y devuelve una matriz de los resultados.

6

Creo que desea utilizar el método indexOfObject. De the documentation:

indexOfObject:

devuelve el índice más bajo cuya correspondiente valor de la matriz es igual a un objeto dado.

- (NSUInteger)indexOfObject:(id)anObject

Parámetros

anObject

An object. 

Valor de retorno

El índice más bajo cuya valor de matriz correspondiente es igual t o anObject. Si ninguno de los objetos en la matriz es igual a anObject, devuelve NSNotFound.

Discusión

objetos se consideran iguales si isEqual: vuelve YES.

Importante: Si anObject es nil se produce una excepción .

+0

Gracias por su respuesta rápida y precisa de edición (1 de ese), Pero CRD también describió valueForKey, como pregunté. – rptwsthi

0

Uso NSPredicate para filtrar un NSArray basado en NSDictionary

array = [dictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key == %@)", value]]; 

if([array count]>0) 
{ 
value exists; 
} 
4

Se puede utilizar:

NSInteger idx = [myArray indexOfObject:obj]; 

para encontrar el índice del objeto.
Y para comprobar si el objeto está allí o no en serie puede usar:

- (BOOL)containsObject:(id)anObject 
0

Combinar objectAtIndex y indexOfObject así:

[tmpArray objectAtIndex:[tmpArray indexOfObject:yourObject]]; 
Cuestiones relacionadas