在谓词中使用@ min,@ max等? [英] Using @min,@max and etc inside a predicate?
问题描述
是否可以在谓词中使用@min等聚合运算符?
Is it possible to use aggregate operator such as @min inside a predicate?
BTW谓词过滤对象数组。
BTW The predicate filters an array of objects.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.score == @min.score"];
我知道你可以使用键值运算符检索最小值,例如:
I know you can retrieve the min value using the key-value operators eg:
NSNumber *minScore = [myArray valueForKeyPath:@"@min.score"];
到目前为止,我只收到有关@min不符合键值的对象的错误。
So far I only get errors about the objects not being key value compliant for "@min".
谢谢
推荐答案
您收到该错误的原因是谓词被应用于 myArray
中的每个对象,并且这些对象显然不支持键路径 @min.score
。不过,NSPredicate确实支持至少一些收集运营商。这是一个有效的简单示例:
The reason that you're getting that error is that the predicate is being applied to each object in myArray
, and those objects apparently don't support the key path @min.score
. NSPredicate does have support for at least some of the collection operators, though. Here's a simple example that works:
NSDictionary *d1 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:35] forKey:@"score"];
NSDictionary *d2 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:52] forKey:@"score"];
NSDictionary *d3 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:13] forKey:@"score"];
NSDictionary *d4 = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:19] forKey:@"score"];
NSArray *array = [NSArray arrayWithObjects:d1, d2, d3, d4, nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.score == %@.@min.score", array];
NSLog(@"Min dictionaries: %@", [array filteredArrayUsingPredicate:predicate]);
在这种情况下,您可以看到 @min.score
关键路径应用于数组,这是有道理的。输出是一个包含一个包含最小值的字典的数组:
You can see that in this case, the @min.score
key path is applied to the array, which makes sense. The output is an array containing the one dictionary that contains the minimum value:
Min dictionaries: (
{
score = 13;
}
)
这篇关于在谓词中使用@ min,@ max等?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!