2014-11-02 2 views
-1

У меня NSDictionary так: объект -> имя, ключ -> номер телефона (массив)поиска значения NSDictionary с NSArray

Когда пользователь выполняет поиск, я хочу, чтобы создать новый NSDictionary на основе массива с результатами поиска, например: @[@"Anna Haro",@"John Appleseed"];

Я знаю, что dictionaryWithValuesForKeys является встроенной функцией, но как мне создать новый метод dictionaryWithKeysForValues?

ответ

0

, поскольку я не являюсь носителем английского языка. Надеюсь, я правильно понял, чего вы пытаетесь достичь.

Если бы я не понял, что вы пытаетесь достичь, если, например, массив результатов поиска содержит строки @"Anna Haro" и @"John Appleseed", вы хотите, чтобы извлечь соответствующие ключи из заданного словаря, и создать новый словарь, который содержит только строки массива результатов и соответствующие им ключи из словаря, не так ли?

Если это то, что вы пытаетесь сделать, вы можете сделать следующее:

{ 
    // resultsArray will represent the NSArray that hold the search results 
    // originalDict will represent the NSDictionary you want to extract the keys from 

    NSMutableDictionary *resultsDict = [[NSMutableDictionary alloc] init]; 

    for (NSString *object in resultsArray) { 
     NSArray *keys = [originalDict allKeysForObject: object]; 

     for (NSArray *key in keys) { 
      [resultsDict setObject: object forKey: key]; 
     } 
    } 
} 

В коде выше мы сначала создать NSMutableDictionary, который будет наш новый словарь из результатов,
Тогда мы итерация через каждый объект массива результатов поиска,
Затем мы вызываем NSDictionary метод allKeysForObject в оригинальном словаре для каждого объекта в массиве, который создает NSArray со всеми ключами, соответствующими этому объекту, поэтому, если у вас есть несколько ключей для объекта, который в вашем конкретный случай, если я правильно понимаю, - это несколько массивов телефонных номеров для человека (хотя, я думаю, это не должно произойти), массив будет содержать все из них, и поэтому наш следующий шаг - итерация по этому массиву ,
И, наконец, мы просто добавляем значение и пару ключей в новый словарь.

Лично я бы установил его наоборот,
Я бы установил массив номеров телефонов в качестве объекта и имя человека в качестве ключа.
Сделать для меня больше смысла, и я думаю, что будет легче получить доступ таким образом,
Но это ваш выбор.

Я надеюсь, что ответил на ваш вопрос,
Удачи!

+0

Спасибо! Я выбрал эту структуру, потому что ключи (номера телефонов) уникальны. – bdv

Смежные вопросы