NSMutableArray filterUsingPredicate только после определенного индекса - PullRequest
4 голосов
/ 16 февраля 2012

Я пытаюсь отбросить свой NSMutableArray элементов с помощью filterUsingPredicate.

Сложность в том, что я всегда хочу сохранить как минимум 10 элементов в массиве, независимо от того, проходят ли они тест предиката. Так что-то вроде:

NSPredicate * cullPredicate = [NSPredicate predicateWithFormat:
        @"distanceFromCurrent <= 25 OR index < 10"];

[self.myArray filterUsingPredicate:cullPredicate];

Индекс ИЛИ <10 как показатель того, что я хотел бы сделать ... Я понимаю, что это не сработает. </p>

Возможно ли это с предикатами? Или мне нужно вытащить другой массив с элементами, начинающимися с 10, применить фильтр, а затем добавить его обратно в исходный массив?

1 Ответ

6 голосов
/ 16 февраля 2012

NSPredicate имеет метод -predicateWithBlock:, который вы можете использовать для этого. Как то так:

NSArray *array = [[self.myArray copy] autorelease];
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {        
    if ([array indexOfObject:evaluatedObject] < 10) return YES;
    return evaluatedObject.distanceFromCurrent <= 25;
}];
[self.myArray filterUsingPredicate:predicate];
...