2015-09-03 3 views
-1

Я один NSArray, который содержит NSDictionary объект с ключами { «имя», «возраст», «вес»} где имя ключа является NSString, возраст NSInteger, вес всплывают ЗначениеФильтр NSDictionary из NSArray

Мне нужно фильтровать NSArray со следующими условиями 1.name содержит «а» 2.age ниже 18 3.weight менее 50

ответа будет Оценил

+0

NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "SELF.name CONTAINS [c]% @ AND SELF.age.integerValue <=% d AND SELF.weight.floatValue <% f", @ "abc", 18, 50.]; – Larme

ответ

0

Это будет работать, но не элегантный вообще.

NSMutableArray *filteredArray = [[NSMutableArray alloc]init]; 
for (NSDictionary *dic in myArray){ 

int age = [[dic objectForKey:@"age"]intValue]; 

    if (age < 18){ 

     float weight = [[dic objectForKey:@"weight"]floatValue]; 
     if (float < 50){ 

     string name = [dic objectForKey:@"name"]; 
     if (![string rangeOfString:@"bla"].location == NSNotFound) { 
      [filteredArray addObject:dic]; 
     } 

     } 
    } 

}

Другое элегантное решение заключается в использовании блока перечисления и предикаты проверить словарь содержания, но я не достаточно комфортно в Objective-C, чтобы сделать это.