Разница между всеми, любыми и некоторыми операторами в NSPredicate


Я действительно изо всех сил пытаюсь понять эти 3. Похоже, что ANY и SOME делают одно и то же, но я не вижу разницы с ALL.

2 8

2 ответа:

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

Все члены.возраст > 30

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

Любые члены.возраст > 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) соответствуют предикату. С любым предикатом вы найдете обе группы, потому что в обеих группах по крайней мере один член соответствует предикату.

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

ALL predicate принимает значение true, когда predicate принимает значение true для каждый элемент.

ANY predicate принимает значение true, когда predicate принимает значение true по крайней мере для 1 элемента.

Обратите внимание, что вы всегда можете выразить все предикаты с помощью любого и наоборот, например ALL condition эквивалентно NOT (ANY NOT(condition)).

Вы можете найти дополнительную информацию в руководстве по программированию предикатов , Глава агрегатные операции