2013-10-10 5 views
0

Я хочу дать ключевое значение из моего NSDictionary и получить связанное с ним значение. у меня есть это:Получить значение из nsdictionary

NSArray *plistContent = [NSArray arrayWithContentsOfURL:file]; 
NSLog(@"array::%@", plistContent); 

dict = [plistContent objectAtIndex:indexPath.row]; 

cell.textLabel.text = [dict objectForKey:@"code"]; 

plistContent с:

(
     { 
     code = world; 
     key = hello; 
    }, 
     { 
     code = 456; 
     key = 123; 
    }, 
     { 
     code = 1; 
     key = yes; 
    } 
) 

Так как же я получаю "привет", давая словарь "мир"?

+0

просто повторите «NSDictionary» и сравните со значением «мир» и найдите правильные данные. – Raptor

+0

какая проблема? возможно plistContent NSArray, а не NSDictionary? Этот plistContent, который вы показываете нам, зарегистрирован в NSLog (@ "array ::% @", plistContent); ? – BergP

+0

@PavelKatunin да, как я могу получить «привет» из «мира» – BluGeni

ответ

2

Если я правильно понял ваш вопрос, вы хотите найти словарь, где «code» = «world», чтобы получить значение для «ключа».

Если вы хотите сохранить структуру данных, как это, то вам придется выполнить последовательный поиск, и один из способов сделать это просто:

NSString *keyValue = nil; 
NSString *searchCode = @"world"; 
for (NSDictionary *dict in plistContents) { 
    if ([[dict objectForKey:@"code"] isEqualToString:searchCode]) { 
     keyValue = [dict objectForKey:@"key"]); // found it! 
     break; 
    } 
} 

Однако, если вы делаете много этого поиска то вам лучше реорганизовать структуру данных, так что это словарь словарей, введенный на значении «коды», превращая его так:

NSMutableDictionary *dictOfDicts = [[NSMutableDictionary alloc] init]; 
for (NSDictionary *dict in plistContents) { 
    [dictOfDicts setObject:dict 
        forKey:[dict objectForKey:@"code"]]; 
} 

(обратите внимание, что код сломается, если один из словарей не содержит запись «code»).

А потом просмотровых так просто, как:

NSDictionary *dict = [dictOfDicts objectForKey:@"world"]); 

Это будет «мертвым быстро».

0
- (NSString*) findValueByCode:(NSString*) code inArray:(NSArray*) arr 
{ 
    for(NSDictonary* dict in arr) 
    { 
     if([[dict valueForKey:@"code"] isEqualToString:code]) 
     { 
      return [dict valueForKey:@"key"] 
     } 
    } 

    return nil; 
} 
+0

Зачем использовать кодировку с ключом? – trojanfoe

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