Und für Menschen, die nicht ganz bekommt, was die Dokumentation sagt, ein SUBQUERY
ist im Wesentlichen diese:
SUBQUERY(collection, variableName, predicateFormat)
Und könnte (vereinfachend) wie folgt umgesetzt werden:
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;
So Kurz gesagt, eine SUBQUERY
nimmt im Grunde genommen eine Sammlung von Objekten und filtert verschiedene Objekte basierend auf dem Prädikatausdruck der SUBQUERY
heraus und gibt die resultierende Sammlung zurück. (Und das Prädikat kann sich andere SUBQUERY
s enthalten)
Beispiel:
NSArray * arrayOfArrays = [NSArray arrayWithObjects:
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
[NSArray arrayWithObjects:....],
nil];
NSPredicate * filter = [NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $a, [email protected] > 42)"];
NSArray * filtered = [arrayOfArrays filteredArrayUsingPredicate:filter];
//"filtered" is an array of arrays
//the only arrays in "filtered" will have at least 42 elements each
Damn! Ich kann nicht glauben, dass ich das vermisst habe. Danke vielmals. – pieSquared
Woher weißt du, welchen Brief zu verwenden? An manchen Stellen sehe ich $ x an einigen Stellen, an denen ich $ s sehe, andere sehe ich $ a, und ich kann per Kontext keine Diff zwischen $ x und $ s sehen. – jpswain
@ orange80: Der Variablenname ist Ihre Wahl. Siehe die Dokumentation, die ich in meiner Antwort verlinkt habe. Wenn Sie Python kennen, ist es wie gesagt: [x für x in der Sammlung if (eine Bedingung mit x)]. Soweit ich weiß, muss der Variablenname nicht einmal ein einzelner Buchstabe sein. –