objective how example dictionaries create iphone nsmutabledictionary

iphone - how - nsdictionary swift 4



¿Cómo obtener la clave para un objeto dado de un NSMutableDictionary? (4)

Echa un vistazo a:

- (NSArray *)allKeysForObject:(id)anObject

Tengo un objeto que está en un gran NSMutableDictionary, y necesito averiguar qué clave tiene. Así que quiero buscar esa "tabla" de ambas columnas. No solo con llaves, sino también con objetos (para conseguir llaves). ¿Es eso posible?


Eso es definitivamente posible con el método de bloque de NSDictionary.

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

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

Úsalo así:

NSSet *keys = [myDictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { BOOL found = (objectForWhichIWantTheKey == obj); if (found) *stop = YES; return found; }];

Echa un vistazo a esta respuesta para más detalles.

¿Cómo especifico el objeto / predicado de bloque requerido por keysDfEntriesPassingTest de NSDictionary?


Mira a la clase padre (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject

Lo que devolverá una NSArray de todas las claves para un Valor de Objeto dado. PERO lo hace enviando un mensaje isEqual a cada objeto del Diccionario, por lo que, para su gran conjunto de datos, puede que este no sea el mejor rendimiento.

Tal vez necesite mantener alguna forma de estructura (s) de estructura de indexación adicional para poder ubicar los objetos en algunos valores críticos dentro de ellos, vinculados a la clave sin una comparación directa de objetos


Para responder a su pregunta de una manera más específica, use lo siguiente para obtener una clave para un objeto en particular:

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