2015-05-06 2 views

ответ

10

Давайте список групп. Каждая группа имеет членов типа. У каждого человека есть возраст.

ALL members.age> 30

означает, что вы найдете группу с членами, которые все старше 30. Вы не найдете группу, по крайней мере, один отдельный член быть 30 или моложе.

ANY members.age> 30

означает, что вы найдете группу, по крайней мере, одного члена старше 30. Вы не найдете группу со всеми членами составляет 30 лет или моложе.

Group1  > 30 
    Amin 45 YES 
    Chris 29 NO 
      --- 
All   NO (because Chris is too young) 
Any   YES (because Amin is old enough) 

Group2  > 30 
    Amin 45 YES 
    Foo 35 YES 
      --- 
All   YES (because all members are old enough) 
Any   YES (because at least one member is old enough) 


Group3  > 30 
    Chris 29 NO 
    Bar 21 NO 
      --- 
All   NO (because at least one member is too young) 
Any   NO (because all members are too young) 

С предикатом ALL вы найдете Group2, потому что все члены (Amin, Foo) соответствуют предикату. С ЛЮБОЙ предикат вы найдете обе группы, потому что в обеих группах по крайней мере один член соответствует предикату.

+0

Обратите внимание, что если вы используете этот предикат в выборке Core Data для типа хранилища SQLite, существуют важные ограничения. Прочтите весь раздел Fetch Predicates и Sort Descriptors в Руководстве по программированию основных данных: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html#//apple_ref/doc/ UID/TP40002875-SW11 –

5

ALL и ANY являются основными логическими операторами.

ALL predicate оценивает на true, когда predicate оценивает true для КАЖДЫЙ пункт.

ANY predicate оценивает true, когда predicate оценивает истину не менее чем за 1 позицию.

Обратите внимание, что вы всегда можете выразить ВСЕ предикат, используя ЛЮБОЙ и наоборот, например, ALL condition эквивалентен NOT (ANY NOT(condition)).

Вы можете найти более подробную информацию в Predicate Programming Guide, Глава Совокупные Операции

+0

Посмотрите мои комментарии по поводу ответа Амина. Существуют некоторые ограничения при использовании предиката с запросом на выборку Core Data в хранилище SQLite. –

+0

И больше, не упомянуто. Например, вы не можете использовать вычисленные свойства. (В принципе вы можете сказать: все, что не является простым SQL-запросом, не может быть выполнено.) Но это, безусловно, нет критериев, чтобы отличать ВСЕ от ЛЮБОГО, потому что эти ограничения применимы к обоим. –

Смежные вопросы