2014-01-06 5 views
1

Я NSDictionary, который содержит элементы со следующими структурамиПоиск элемент в NSDictionary по значению

именем -> Значение

электронной почты -> ключом

я получаю значение (из приведенных выше структуры) от пользователя , Теперь я хочу искать элемент в nsdictionary по значению (введенный пользователем) не по ключу, присутствует ли он в nsdictionary или нет, а также хочет получить индекс этого элемента, если он присутствует.

Как это сделать?

ответ

6

Лучшее, чтобы сделать это было бы Propably

- (NSArray *)allKeysForObject:(id)anObject

Этот метод NSDictionary дает Вам все ключи, имеющие anObject как их значение. Если у вас есть только один объект во всем словаре, он будет логически возвращать массив только с одним ключом.

+0

ya thats функция, я искал. – ViruMax

3

Структура данных словаря не имеет «порядка», поэтому вам придется искать свой ключ, итерируя коллекцию и ища требуемое значение.

Пример:

NSString *targetKey = nil; 
NSArray *allKeys = [collection allKeys]; 
for (int i = 0; i < [allKeys count]; ++i) { 
    NSString *key = [allKeys objectAtIndex:i]; 
    NSString *obj = [collection objectForKey:key]; 
    if ([obj isEqualToString:searchedString]) { // searchedString is what you're looking for 
     targetKey = key; 
     break; 
    } 
} 

// check if key was found (not nil) & proceed 
// ... 
+0

Хороший ответ. Экономит мое время. Спасибо – Shivaay

0

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

NSArray *array = [yourDictionaryObject allValues]; 
    if ([array containsObject:@"userEnteredValue"]) { 
     <#statements#> 
    } 
0

Вам нужно iterate through the Dictionary for the keys имеет значение вашей потребности: Попробуйте это:

NSArray *keys= [json allKeys]; 
    for (NSString *keysV in keys){ 
     NSLog(@"Keys are %@", keysV); 
    if([Your_Dict objectForKey: keysV] isEqual:@"string to Match"){ 
    //Do your stuff here 
    } 
} 
4
NSArray * users = ...; //your array of NSDictionary objects 
NSPredicate *filter = [NSPredicate predicateWithFormat:@"email = [email protected]"]; 
NSArray *filteredContacts = [contacts filteredArrayUsingPredicate:filter]; 

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

filter = [NSPredicate predicateWithFormat:@"contact_type = 42 OR contact_type = 23"]; 
Смежные вопросы