Подтвердить что ты не робот

Как получить ключ для данного объекта из NSMutableDictionary?

У меня есть объект, который находится в большом NSMutableDictionary, и вам нужно выяснить, какой ключ у него есть. Поэтому я хочу посмотреть, что "таблица" из обоих столбцов. Не только с ключами, но и с объектами (чтобы получить ключи). Возможно ли это?

4b9b3361

Ответ 1

Посмотрите на родительский класс (NSDictionary)

- (NSArray *)allKeysForObject:(id)anObject

который вернет NSArray всех ключей для данного значения Object. НО он делает это, отправив сообщение isEqual каждому объекту словаря, поэтому для вашего большого набора данных это может быть не лучшим образом.

Возможно, вам нужно сохранить какую-либо дополнительную структуру структуры индексирования, чтобы вы могли находить объекты на некоторых критических значениях внутри них, связанных с ключом без прямого сравнения объектов.

Ответ 2

Чтобы ответить на вопрос более конкретно, используйте следующее, чтобы получить ключ для определенного объекта:

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

Ответ 3

Взгляните на:

- (NSArray *)allKeysForObject:(id)anObject

Ответ 4

Это определенно возможно с помощью метода блока NSDictionary

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

Вам нужно вернуть объекты, которые удовлетворяют некоторому условию (предикат).

Используйте его следующим образом:

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

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

    }];

Проверьте этот ответ для более подробной информации

Как указать объект блока/предикат, требуемый ключами NSDictionaryAfEntriesPassingTest?