Ich habe ein Objekt, das in einem großen NSMutableDictionary ist, und muss herausfinden, welcher Schlüssel das hat. Also möchte ich diese "Tabelle" von beiden Spalten nachschlagen. Nicht nur mit Schlüsseln, sondern auch mit Objekten (um Schlüssel zu bekommen). Ist das möglich?Wie bekomme ich den Schlüssel für ein bestimmtes Objekt von einem NSMutableDictionary?
Antwort
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
Werfen Sie einen Blick auf:
- (NSArray *)allKeysForObject:(id)anObject
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
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?