2013-10-08 2 views
-1

У меня есть массив словарейНайти словарь в ArrayOfDictionaries с определенной KeyValue пары

for(int i = 0; i < 5; i++) { 
    NSMutableDictionary *_myDictionary = [NSMutableDictionary dictionary]; 

    [_myDictionary setObject:[NSString stringWithFormat:@"%d",i] forKey:@"id"]; 
    [_myDictionary setObject:label.text @"Name"]; 
    [_myDictionary setObject:label1.text @"Contact"]; 
    [_myDictionary setObject:label2.text @"Gender"]; 
} 

[_myArray addObject:_myDictionary]; 

Теперь я хочу, чтобы выбрать словарь из массива, objectForKey: @ «идентификатор» является 1 или 2 или что-то еще, как есть запрос SQL SELECT * из таблицы, где ID = 2. Я знаю, что этот процесс

int index = [_myArray count]; 

for(int i = 0; i < 5; i++) 
{ 

NSMutableDictionary *_myDictionary = [NSMutableDictionary dictionaryWithDictionary:[_myArray objectAtIndex:i]]; 

if([[_myDictionary objectForKey:@"id"] isEqualToString:id]) 
{ 

index = i; 

return; 

} 

} 

if(index != [_myArray count]) 
    NSLog(@"index found - %i",index); 

else 
    NSLog(@"index not found"); 

Любая помощь будет оценена. Спасибо заранее!

+3

Что ваша актуальная проблема? – occulus

ответ

2

Попробуйте, это используя быстрое перечисление

NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    for(dict in _myArray) 
    { 

     if([[dict valueForKey:@"id"] isEqualToString:@"1"]) 
     { 
      return; 
     } 
    } 
+0

Это действительно так, но если массив id слишком длинный, содержащий словарь со 100 ключами, это занимает много времени. Не существует ли какой-либо sql-запрос для этого. – Swati

+1

это не займет много времени, вы можете добавить 100 объектов и посмотреть, только для целей тестирования, это быстрый процесс. –

0

Вы должны использовать [NSNumber numberWithInteger: i] не NSString.

код передний этот поиск должен выглядеть следующим образом:

NSString *valueToFind = [NSString stringWithFormat:@"%d", intValue]; // [NSNumber numberWithInteger: intValue] 
NSInteger index = [_myArray indexOfObjectPassingTest:^BOOL(NSDictionary *obj, NSUInteger idx, BOOL *stop) { 
    return [valueToFind isEqualToString: [obj objectForKey: @"id"]]; 
}]; 
NSDitionary *found = [_myArray objectAtIndex: index]; 
+0

Вы должны использовать [NSNumber numberWithInteger: i] не NSString. – Swati

+0

Правильный способ поместить базовые типы в массивы и словари - это использовать 'NSNumber', преобразование в' NSString' может быть проблематичным (это зависит от того, что вы делаете). –

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