我会使用以下谓词:
NSString *format = @"SUBQUERY(testScoreObjects, $each, $each.score > $n && $each.scoreDate == testScoreObjects.@max.scoreDate)[SIZE] > 0";
NSDictionary *substitutions = @{@"n": @3}; // 3 is the value for n
NSPredicate *predicate = [[NSPredicate predicateWithFormat:format] predicateWithSubstitutionVariables:substitutions];
或者
NSString *format = @"ANY SUBQUERY(testScoreObjects, $each, $each.score > $n).scoreDate == testScoreObjects.@max.scoreDate";
NSDictionary *substitutions = @{@"n": @3}; // 3 is the value for n
NSPredicate *predicate = [[NSPredicate predicateWithFormat:format] predicateWithSubstitutionVariables:substitutions];
两者都可以正常过滤数组,但我尚未测试 CoreData 是否能够将它们转换为 SQL(因此它可以与 fetch 请求一起使用)。
在处理大型商店时,第二个谓词应该更有效(据我所知),因为testScoreObjects.@max.scoreDate
每个学生只评估一次。当然,实际结果可能会有所不同。