Как мне сгруппировать и затем посчитать NSSet? - PullRequest
0 голосов
/ 01 января 2011

Как мне сгруппировать записи в сущности базовых данных и затем подсчитать их, чтобы я мог найти группу с наибольшим количеством?

У меня есть «набор», в котором много «ног» у каждогоу которого есть один «победитель».Вопрос, на который я пытаюсь ответить: кто выиграл больше всех?

Помощь приветствуется.Ох, и с новым годом!

1 Ответ

0 голосов
/ 01 января 2011

Перебирайте набор и подсчитывайте «ноги» для каждого «победителя».Сохраните счетчик ног в словаре:

NSMutableDictionary* legCount = [[NSMutableDictionary alloc] init];
NSNumber* count;
for (leg in legsSet) {
    id winner = [leg objectForKey:@"winner"]; // assumes leg is a dictionary
    if (count = [legCount objectForKey:winner]) {
        [legCount setObject:[NSNumber numberWithInt:[count intValue]+1] forKey:winner];
    } else {
        [legCount setObject:[NSNumber numberWithInt:1] forKey:winner];
    }
}

Теперь вам нужно найти ключ в новом словаре с наибольшим значением.

id winner = [[legCount keysSortedByValueUsingComparator:^(id obj1, id obj2) {

    if ([obj1 intValue] > [obj2 intValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([obj1 intValue] < [obj2 intValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}] lastObject];
...