Same results in Objective C. I tried this for your question and I got the solution now.It works fine.
NSArray *array = @[@{@"name" : @"lunch", @"date" : @"01-01-2015" , @"hours" : @"1"},
@{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"},
@{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"},
@{@"name" : @"lunch", @"date" : @"01-01-2015" , @"hours" : @"1"},
@{@"name" : @"dinner", @"date" : @"01-01-2015" , @"hours" : @"1"},
];
NSMutableArray *resultLunchArray = [NSMutableArray new];
NSMutableArray *resultDinnerArray = [NSMutableArray new];
NSMutableArray *finalResultsArray = [NSMutableArray new];
NSArray *groupLunch = [array valueForKeyPath:@"@distinctUnionOfObjects.name"];
for (NSString *str in groupLunch)
{
NSArray *groupNames = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name = %@", str]];
if([str isEqualToString:@"lunch"])
{
for (int i = 0; i < groupNames.count; i++)
{
NSString *nameLunch = [[groupNames objectAtIndex:i] objectForKey:@"name"];
NSString *dateLunch = [[groupNames objectAtIndex:i] objectForKey:@"date"];
NSString *strNameLunch = [NSString stringWithFormat:@"%@ : %@",nameLunch,dateLunch];
[resultLunchArray addObject:strNameLunch];
}
[finalResultsArray addObject:resultLunchArray];
}
else{
for (int i = 0; i < groupNames.count; i++)
{
NSString *nameDinner = [[groupNames objectAtIndex:i] objectForKey:@"name"];
NSString *dateDinner = [[groupNames objectAtIndex:i] objectForKey:@"date"];
NSString *strNameDinner = [NSString stringWithFormat:@"%@ : %@",nameDinner,dateDinner];
[resultDinnerArray addObject:strNameDinner];
}
[finalResultsArray addObject:resultDinnerArray];
}
}
NSLog(@"The final results are - %@",finalResultsArray);
The Output Reults are
The final results are - (
(
"lunch : 01-01-2015",
"lunch : 01-01-2015"
),
(
"dinner : 01-01-2015",
"dinner : 01-01-2015",
"dinner : 01-01-2015"
)
)