Iphone NSPredicate能否在另一个数组中的对象所拥有的数组中搜索对象?
我已经阅读了NSPredicate文档,一路上都无法理解它。我可以理解简单的谓词,但现在如何为以下情况创建谓词: 我有一个Foo对象数组。在Foo类中,其中一个ivar是一个nsmutablebar对象数组。我需要过滤Foo对象的数组,以获得在其数组中具有特定Bar对象的对象。怎么做Iphone NSPredicate能否在另一个数组中的对象所拥有的数组中搜索对象?,iphone,objective-c,Iphone,Objective C,我已经阅读了NSPredicate文档,一路上都无法理解它。我可以理解简单的谓词,但现在如何为以下情况创建谓词: 我有一个Foo对象数组。在Foo类中,其中一个ivar是一个nsmutablebar对象数组。我需要过滤Foo对象的数组,以获得在其数组中具有特定Bar对象的对象。怎么做 另外,一次找到多个Bar对象是否更容易(或可能),或者组合多个谓词,每个谓词搜索一个特定的Bar?您的问题可以分为两个问题,我将尝试按顺序回答它们 您可以在Foo实例上定义谓词,只有当实例的Bar对象数组包含与单独
另外,一次找到多个Bar对象是否更容易(或可能),或者组合多个谓词,每个谓词搜索一个特定的Bar?您的问题可以分为两个问题,我将尝试按顺序回答它们
Foo
实例上定义谓词,只有当实例的Bar
对象数组包含与单独谓词匹配的Bar
实例时,该谓词才为true。您需要的是一个[SUBQUERY][1]
表达式。这样的谓词字符串将使Foo
实例与fooInt
值10匹配,并与barArray
属性中的Bar
实例匹配,该属性的barInt
值为1:
@“fooInt==10&&子查询(barArray,$x,$x.barInt==1)。@count>0”
子查询表达式的一般格式是子查询(集合,$var,谓词)
。子查询
表达式返回集合
中与谓词
匹配的对象集合,因此取它的@count
将告诉您Foo
实例是否有一个与子查询谓词匹配的Bar
实例子查询
表达式中可以有任意复杂的谓词(包括嵌套的子查询
表达式)。考虑到包含子查询表达式的谓词通常执行起来很昂贵(它们大致对应于SQLJOIN
),使用或
在一个子查询
表达式中搜索多个条
实例,然后在子查询
的结果中测试适当的@count
。类谓词字符串
@“fooInt==10&&SUBQUERY(barArray,$x,$x.barInt==1 | |$x.barInt==2)。@count>=2”
将在Foo
实例的barInt
==1的Bar
实例和barInt
实例的barray
中查找Foo
实例你的问题可以分为两个问题,我试着按顺序回答
Foo
实例上定义谓词,只有当实例的Bar
对象数组包含与单独谓词匹配的Bar
实例时,该谓词才为true。您需要的是一个[SUBQUERY][1]
表达式。这样的谓词字符串将使Foo
实例与fooInt
值10匹配,并与barArray
属性中的Bar
实例匹配,该属性的barInt
值为1:
@“fooInt==10&&子查询(barArray,$x,$x.barInt==1)。@count>0”
子查询表达式的一般格式是子查询(集合,$var,谓词)
。子查询
表达式返回集合
中与谓词
匹配的对象集合,因此取它的@count
将告诉您Foo
实例是否有一个与子查询谓词匹配的Bar
实例子查询
表达式中可以有任意复杂的谓词(包括嵌套的子查询
表达式)。考虑到包含子查询表达式的谓词通常执行起来很昂贵(它们大致对应于SQLJOIN
),使用或
在一个子查询
表达式中搜索多个条
实例,然后在子查询
的结果中测试适当的@count
。类谓词字符串
@“fooInt==10&&SUBQUERY(barArray,$x,$x.barInt==1 | |$x.barInt==2)。@count>=2”
将在Foo
实例的barInt
==1的Bar
实例和barInt
实例的barray
中查找Foo
实例我找到了我要找的东西:
@class Foo {
int var1;
NSArray *barObjs;
}
predicate = @"var1 == 5 AND ANY barObjs.id == 5";
我找到了我要找的东西:
@class Foo {
int var1;
NSArray *barObjs;
}
predicate = @"var1 == 5 AND ANY barObjs.id == 5";
为什么要使用NSPredicate?来筛选数组。从理论上讲,可以应用无限多个筛选器,它们需要组合在一起,这似乎就是FilteredarrayingPredicate:方法存在的确切原因。为什么要使用NSPredicate?来筛选数组。理论上,可以应用的过滤器数量是无限的,它们需要组合在一起,这似乎就是FilteredarrayingPredicate:方法存在的确切原因。