2015-07-01 4 views
1

У меня есть следующий массив ответов. Пожалуйста, помогите мне, чтобы фильтровать массив типа «Private»Фильтрация NSarray со значениями для ключа

leagues =  (
       { 
      id = 23; 
      member = 1; 
      name = DelphiFC; 
      password = "<null>"; 
      type = Public; 
      username = cyriljose; 
     }, 
       { 
      id = 24; 
      member = 1; 
      name = FascoBreFC; 
      password = "<null>"; 
      type = Public; 
      username = cyriljose; 
     }, 
       { 
      id = 25; 
      member = 1; 
      name = HingeSpotFC; 
      password = "<null>"; 
      type = Public; 
      username = cyriljose; 
     }, 
       { 
      id = 22; 
      member = 1; 
      name = popilatorFC; 
      password = 25369852; 
      type = Private; 
      username = cyriljose; 
     }, 
       { 
      id = 21; 
      member = 1; 
      name = trojanFC; 
      password = 12354687; 
      type = Private; 
      username = cyriljose; 
     } 
    ); 

я имею в виду, я должен получить массив, содержащий имена чемпионских типа «Private». Я должен использовать NSPredicate, и если да, то как? Пожалуйста, помогите

+0

Итак, вы получаете эти данные в формате JSON? Если так, вы действительно спрашиваете, как вы правильно разбираете это? –

+0

Вы сказали 'type" Private "', но я не видел ни одного такого ключа. Что именно вы хотите? –

+0

@TapasPal type = Private; –

ответ

3

Ниже приведен весь пример для отображения тех данных, которые type является Private.

NSArray *arLeagues = @[@{ 
           @"id":@23, 
           @"member":@1, 
           @"name":@"DelphiFC", 
           @"password":@"<null>", 
           @"type":@"Public", 
           @"username":@"cyriljose", 
           }, 
          @{ 
           @"id":@24, 
           @"member":@1, 
           @"name":@"FascoBreFC", 
           @"password":@"<null>", 
           @"type":@"Public", 
           @"username":@"cyriljose", 
           }, 
          @{ 
           @"id":@25, 
           @"member":@1, 
           @"name":@"<null>", 
           @"password":@"12354687", 
           @"type":@"Public", 
           @"username":@"cyriljose", 
           }, 
          @{ 
           @"id":@22, 
           @"member":@1, 
           @"name":@"popilatorFC", 
           @"password":@"25369852", 
           @"type":@"Private", 
           @"username":@"cyriljose", 
           }, 
          @{ 
           @"id":@21, 
           @"member":@1, 
           @"name":@"trojanFC", 
           @"password":@"12354687", 
           @"type":@"Private", 
           @"username":@"cyriljose", 
           } 
          ]; 



    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"type contains[cd] %@", @"Private"]; 
    NSArray *matchingDicts = [arLeagues filteredArrayUsingPredicate:predicate]; 
    NSLog(@"%@",matchingDicts); 

И выход

(
     { 
     id = 22; 
     member = 1; 
     name = popilatorFC; 
     password = 25369852; 
     type = Private; 
     username = cyriljose; 
    }, 
     { 
     id = 21; 
     member = 1; 
     name = trojanFC; 
     password = 12354687; 
     type = Private; 
     username = cyriljose; 
    } 
) 
+0

Позвольте мне видеть @Neon :) –

+0

@FionaShoff вызывающе работает. –

+0

Я пишу ответ, ты меня пинаешь! :) хороший ответ +1 –

1

Попробуйте использовать NSPredicate

NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"Private" forKey:@"type"]];  
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(type == %@)", @"Private"]]; 
2

Ну у меня сложилось впечатление, что вы искали для разбора JSON-файл с этими данными. Если это так, это может сработать:

-(void)parseJSONFile { 

    NSData *jsonData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"JSON FILE URL HERE..."]]; 

    NSError *error; 
    NSMutableDictionary *parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; 

    if ((error == nil) && (parsedData != nil)) { 

     // Get the data you need. 
     NSArray *data_id = [[parsedData objectForKey:@"leagues"] valueForKey:@"id"]; 
     NSArray *data_member = [[parsedData objectForKey:@"leagues"] valueForKey:@"member"]; 
     NSArray *data_name = [[parsedData objectForKey:@"leagues"] valueForKey:@"name"]; 
     NSArray *data_password = [[parsedData objectForKey:@"leagues"] valueForKey:@"password"]; 
     NSArray *data_type = [[parsedData objectForKey:@"leagues"] valueForKey:@"type"]; 
     NSArray *data_username = [[parsedData objectForKey:@"leagues"] valueForKey:@"username"]; 

     // Only store the data for items in the array which 
     // have their "type" property set to "Private". 
     NSMutableArray *private_data = [[NSMutableArray alloc] init]; 

     for (int loop = 0; loop < [data_type count]; loop++) { 

      if ([[private_data objectAtIndex:loop] isEqualToString:@"Private"]) { 

       NSArray *info_block = @[[data_id[loop] description], [data_member[loop] description], [data_name[loop] description], [data_password[loop] description], [data_type[loop] description], [data_username[loop] description]]; 
       [private_data addObject:info_block]; 
      } 
     } 

     // Now you have parsed the private only objects. 
     NSLog(@"%@", private_data); 
    } 

    else { 

     // Error - no data has been downloaded. 
     NSLog(@"Error: %@", error); 
    } 
} 
Смежные вопросы