Я делаю NSFetchRequest
со следующим предикатом:Сортировка NSArray по NSOrderedSet
[NSPredicate predicateWithFormat:@"index IN %@", indexes];
... где indexes
является NSOrderedSet
чисел.
Это дает мне массив «случайно отсортированных» объектов с заданными индексами. Мне нужно отсортировать его так, чтобы объекты отображались в том же порядке, что и в упорядоченном наборе.
Что было бы самым эффективным способом сделать это?
Update
Вот категория основана на ответ Мартина АиР:
@implementation NSArray (SortUsingValues)
- (NSArray *)sortedArrayUsingValues:(NSOrderedSet *)values keyPath:(NSString *)keyPath
{
NSAssert([values isKindOfClass:[NSOrderedSet class]], nil);
NSAssert([keyPath isKindOfClass:[NSString class]], nil);
return [self sortedArrayUsingComparator:^NSComparisonResult(id object, id otherObject) {
id value = [object valueForKeyPath:keyPath];
id otherValue = [otherObject valueForKeyPath:keyPath];
NSUInteger indexOfValue = [values indexOfObject:value];
NSUInteger indexOfOtherValue = [values indexOfObject:otherValue];
if (indexOfValue > indexOfOtherValue) return NSOrderedDescending;
else if (indexOfValue < indexOfOtherValue) return NSOrderedAscending;
else return NSOrderedSame;
}];
}
@end
Спасибо, это именно то, что я искал. Кстати, я только что обновил свой вопрос с категорией, основанной на вашем ответе. –