2014-01-09 3 views
0

У меня есть следующие NSArray:фильтр NSArray с NSDictionary по INT значение

(
     { 
     establecimiento = 15; 
     internet = 500; 
    }, 
     { 
     establecimiento = 0; 
     internet = 1024; 
    }, 
     { 
     establecimiento = 24; 
     internet = 300; 
    } 
) 

И мне нужно фильтровать массив для establecimiento < 10.

Я пытаюсь это:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"establecimiento = %@", [NSNumber numberWithInt:self.establecimientoFiltro]]; 

где self.establecimientoFiltro является ИНТ со значением: 10

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

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

С уважением, Виктор

+2

Почему вы используете «=», если хотите <10? – rdelmar

+0

@ user3175572 Проверьте мой ответ ниже для гибкого вывода. – Pavan

+0

И нет необходимости конвертировать ваш номер в NSNumber - вы можете использовать номер непосредственно с '% d'. –

ответ

1

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

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"establecimiento < 10"]; 
0

Вы должны использовать blocks с Predicate для достижения этой цели.

Предположим, что ваш массив находится в myArray. Теперь сделайте предикат с диапазоном выбора. На данный момент вы хотите, чтобы оно было меньше 10 для establecimientoFiltro.

NSPredicate *keyPred = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) { 
    NSRange myRange = NSMakeRange (0, 9); 
    NSInteger rangeKey = [[obj valueForKey:@"establecimientoFiltro"]integerValue]; 
    if (NSLocationInRange(rangeKey, myRange)) { 
     // found 
     return YES; 
    } else { 
     // not found 
     return NO; 
    } 
}]; 

NSArray *filterArray = [myArray filteredArrayUsingPredicate:keyPred]; 
NSLog(@"%@", filterArray); 

Вы получаете ваш результат фильтруется в filteredArray.

Надеюсь, что это самый эффективный для вас &.

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