2010-05-07 19 views

Respuesta

67

mirada a la clase padre (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

que devolverá un NSArray de todas las claves para un valor determinado de objetos. PERO lo hace enviando un mensaje isEqual a cada objeto del diccionario, por lo que para su gran conjunto de datos esto puede no ser el mejor rendimiento.

Tal vez usted necesita para mantener algún tipo de estructura (s) estructura de indexación adicional para permitir a localizar los objetos sobre algunos valores críticos dentro de ellos, relacionado con la llave sin comparación objeto directo

6

Tome un vistazo a:

- (NSArray *)allKeysForObject:(id)anObject 
19

contestarle pregunta en de forma más concreta, utilice el siguiente para conseguir una llave para un objeto concreto:

NSString *knownObject = @"the object"; 
NSArray *temp = [dict allKeysForObject:knownObject]; 
NSString *key = [temp objectAtIndex:0]; 

//"key" is now equal to the key of the object you were looking for 
6

Eso es definitivamente posible con el método de bloqueo del NSDictionary

- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate; 

Debe devolver objetos que satisfagan alguna condición (predicado).

utilizar de esta manera:

NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { 

     BOOL found = (objectForWhichIWantTheKey == obj); 
     if (found) *stop = YES; 
     return found; 

    }]; 

Salida esta respuesta para más detalles

How do I specify the block object/predicate required by NSDictionary's keysOfEntriesPassingTest?

Cuestiones relacionadas