似乎没有关于Apple的SUBQUERY关键字的文档,我在SO或Google上找不到关于它的简单解释。这是一个阴谋! ;)
请,来自内圈的人是否可以快速解释其语法,以便我可以使用它?
SUBQUERY(Bs, $x, $x IN %@)
由于
答案 0 :(得分:41)
对于那些不太了解文档内容的人来说,SUBQUERY
基本上是这样的:
SUBQUERY(collection, variableName, predicateFormat)
可以(简单地)实现这样:
id resultingCollection = ...; //a new collection, either a mutable set or array
NSMutableDictionary * substitutions = [NSMutableDictionary dictionary];
NSPredicate * p = [NSPredicate predicateWithFormat:predicateFormat];
for (id variable in collection) {
[substitutions setObject:variable forKey:variableName];
NSPredicate * filter = [p predicateWithSubstitutionVariables:substitutions];
if ([filter evaluateWithObject:collection] == YES) {
[resultingCollection addObject:variable];
}
}
return resultingCollection;
简而言之,SUBQUERY
基本上是根据SUBQUERY
的谓词表达式获取对象集合并过滤掉各种对象,并返回结果集合。 (并且谓词本身可以包含其他SUBQUERY
s)
示例:
NSArray * arrayOfArrays = [NSArray arrayWithObjects:
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
nil];
NSPredicate * filter = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $a, $a.@count > 42)"];
NSArray * filtered = [arrayOfArrays filteredArrayUsingPredicate:filter];
//"filtered" is an array of arrays
//the only arrays in "filtered" will have at least 42 elements each
答案 1 :(得分:21)
This is what a subquery evaluates to.(来自this mailing list thread,是Google中“NSPredicate子查询”的第一名。)这些文档还解释了谓词格式字符串语法与它的关系。
答案 2 :(得分:0)
子查询表示一个谓词(第三个参数 - $x IN %@
),它在所有对象上进行评估(第二个参数 - $x
- 它类似于foreach中的变量名称)关系(首先参数 - Bs
)。与常规查询类似,返回对象列表。
我在很多地方都看到人们使用$x
几乎是教条,但$object
objects
关系中的$city
也很有意义(或cities
{{1}} ......):)