User1075
User1075

Reputation: 885

Filtering NSarray with values for key

I have the following resonse array. Please help me to filter the array of type "Private"

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;
        }
    );

I mean i should get an array which contains the league names of type "Private". Whether i should use NSPredicate and if yes how?? Please help

Upvotes: 1

Views: 200

Answers (3)

user4657588
user4657588

Reputation:

Oh well my impression was that you were looking to parse a JSON file with that data. If so, this could work:

-(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);
    }
}

Upvotes: 2

poojathorat
poojathorat

Reputation: 1220

Try using NSPredicate

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

Upvotes: 1

Nimit Parekh
Nimit Parekh

Reputation: 16864

Following is the whole example to showing those data which type is 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);

And output is

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

Upvotes: 3

Related Questions