Как сортировать NSPredicate
Я пытаюсь сортировать свой массив при использовании NSPredicate. Я читал другие места, которые, возможно, с помощью NSSortDescriptor могут быть опцией. Имея некоторые проблемы с этим.
Я пытаюсь сортировать свой массив по имени компании.
Любые советы, оцененные, спасибо
Грег
- (void)filterSummaries:(NSMutableArray *)all byNameThenBooth:(NSString*) text results:(NSMutableArray *)results
{
[results removeAllObjects];
if ((nil != text) && (0 < [text length])) {
if ((all != nil) && (0 < [all count])) {
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"companyName contains[cd] %@ OR boothNumber beginswith %@", text, text];
[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];
}
}
else {
[results addObjectsFromArray:all];
}
}
Ответы
Ответ 1
у вас есть несколько вариантов сортировки массива:
Здесь я покажу подход NSSortDescriptor.
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"companyName contains[cd] %@ OR boothNumber beginswith %@",
text,
text];
// commented out old starting point :)
//[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];
// create a descriptor
// this assumes that the results are Key-Value-accessible
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"companyName"
ascending:YES];
//
NSArray *results = [[all filteredArrayUsingPredicate:predicate]
sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
// the results var points to a NSArray object which contents are sorted ascending by companyName key
Это должно выполнить вашу работу.
Ответ 2
Функция filteredArrayUsingPredicate:
просматривает ваш массив и копирует все объекты, соответствующие предикату, в новый массив и возвращает его. Это не дает никакой сортировки. Это больше поиска.
Используйте функции сортировки NSArray, а именно sortedArrayUsingComparator:
, sortedArrayUsingDescriptors:
, sortedArrayUsingFunction:context:
и т.п., в зависимости от того, что вам больше всего подходит.
Оформить заказ Ссылка на NSArray Class для деталей.
BTW: Если вы хотите сортировать лексически, вы можете использовать sortedArrayUsingSelector:@selector(compare:)
, который будет использовать функцию NSString compare:
, чтобы найти правильный порядок.