Сортировка NSMutableArray с использованием SortDescriptor И Предикат возможно? - PullRequest
5 голосов
/ 22 декабря 2011

У меня есть массив типа «Ресторан», который имеет NSSet «Рейтинг». Рейтинг имеет идентификатор и значение.

Я хочу отсортировать массив Ресторанов по рейтингу с идентификатором 01, от высокого до низкого.

Что-то вроде следующего, но как мне использовать предикат и сортировать дескриптор вместе в originalArray?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Rating.rating_id=%d", ratingID];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"currentValue" ascending:YES];
NSArray *sorted = [[originalArray allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

1 Ответ

5 голосов
/ 23 декабря 2011

Вы можете отсортировать массив, используя блок NSComparator.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"rating_id = %d", ratingID];

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    int value1 = [[[[obj1 ratings] filteredSetUsingPredicate:predicate] anyObject] currentValue];
    int value2 = [[[[obj2 ratings] filteredSetUsingPredicate:predicate] anyObject] currentValue];

    if ( value1 < value2 )
        return NSOrderedAscending;
    if ( value1 > value2 )
        return NSOrderedDescending;
    return NSOrderedSame;
}];
...