2010-05-07 13 views

risposta

67

sguardo alla classe genitore (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

che restituirà un NSArray di tutte le chiavi per un dato valore dell'oggetto. MA lo fa inviando un messaggio isEqual a ciascun oggetto del dizionario, pertanto per il set di dati di grandi dimensioni potrebbe non essere la migliore prestazione.

forse avete bisogno di tenere una qualche forma di struttura addizionale struttura di indicizzazione (s) per consentire di individuare gli oggetti su alcuni valori critici al loro interno, collegato al tasto senza paragoni oggetto diretto

6

Date un'occhiata a:

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

di rispondergli domanda in maniera più specifica, utilizzare il seguente per ottenere una chiave per un particolare oggetto:

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

Questo è sicuramente possibile con il metodo del blocco NSDictionary

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

È necessario restituire oggetti che soddisfano alcune condizioni (predicato).

usare in questo modo:

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

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

    }]; 

Partenza questa risposta per maggiori dettagli

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

Problemi correlati