2010-05-07 5 views

Antwort

67

Blick auf die Elternklasse (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject 

, die eine NSArray aller Schlüssel für einen bestimmten Objektwert zurück. ABER es tut dies durch Senden einer isEqual-Nachricht an jedes Objekt des Dictionary, so dass dies für Ihr großes Dataset nicht die beste Leistung sein kann.

Vielleicht müssen Sie irgendeine Form von zusätzlicher Indexstruktur Struktur (en) halten, damit Sie auf den Schlüssel ohne direkten Objektvergleich

6

Werfen Sie einen Blick auf:

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

beantworten Sie die Objekte auf einigen kritischen Werten in sie verbunden lokalisieren Frage eine speziellere Weise, verwenden Sie die folgenden einen Schlüssel für ein bestimmtes Objekt zu erhalten:

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

das auf jeden Fall möglich, mit NSDictionary-Block-Methode ist

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

Sie müssen Objekte zurückgeben, die eine Bedingung (Prädikat) erfüllen.

es wie folgt verwendet:

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

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

    }]; 

Schauen Sie sich diese Antwort für weitere Details

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