Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Фильтрация Objective-C

0

Класс NSPredicate предназначен для представления предикатов - условий, которые могут быть истинными, например: «Значение employeeID больше 75». Класс NSМutаblеАrrау содержит удобный метод для удаления всех объектов, для которых предикат не выполняется:

-­‐      (void)filterUsingPredicate:(NSPredicate    *)predicate;

У NSArray имеется метод, который создает новый массив со всеми объектами, для которых предикат выполняется:

-­‐   (NSArray  *)filteredArrayUsingPredicate:(NSPredicate  *)predicate;

Допустим, мы хотим отобрать все ресурсы, выделенные работникам, у которых суммарная стоимость выделенных ресурсов превышает $70. Включите в конец main.m следующий код:

[employees removeObjectAtIndex:5]; NSLog(@"allAssets: %@", allAssets);

NSPredicate *predicate = [NSPredicate predicateWithFormat:

@"holder.valueOfAssets >

70"];

NSArray *toBeReclaimed = [allAssets

filteredArrayUsingPredicate:predicate]; NSLog(@"toBeReclaimed: %@", toBeReclaimed); toBeReclaimed = nil;

NSLog(@"Giving up ownership of arrays"); allAssets = nil;

employees = nil;

}

return 0;

}

Постройте и запустите программу Новая версия выводит следующий список ресурсов:

toBeReclaimed: (

"<Laptop 1: $17, assigned to <Employee 6: $119 in assets>>", "<Laptop 3: $51, assigned to <Employee 5: $136 in assets>>", "<Laptop 5: $85, assigned to <Employee 5: $136 in assets>>", "<Laptop 6: $102, assigned to <Employee 6: $119 in assets>>", "<Laptop 8: $136, assigned to <Employee 9: $136 in assets>>", "<Laptop 9: $153, assigned to <Employee 1: $153 in assets>>"

)

Форматная строка в определении предиката может быть очень сложной. Если

вам часто приходится фильтровать содержимое коллекций, обязательно прочитайте руководство «Predicate Programming Guide» из документации Apple.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии