有没有办法做到这一点?我有一组项目,我想从另一组中排除。我知道我可以遍历我的集合中的每个项目,只将它添加到我的filteredSet中,如果它不在另一个集合中,但如果我可以使用谓词那么会很好。
要排除的项目集不是直接相同类型对象的集合;这是一组字符串;如果其中一个属性与该字符串匹配,我想从我的第一个集合中排除任何内容....换句话说:
NSMutableArray *filteredArray = [NSMutableArray arrayWithCapacity:self.questionChoices.count];
BOOL found;
for (QuestionChoice *questionChoice in self.questionChoices)
{
found = NO;
for (Answer *answer in self.answers)
{
if ([answer.units isEqualToString:questionChoice.code])
{
found = YES;
break;
}
}
if (!found)
[filteredArray addObject:questionChoice];
}
这可以用谓词来完成吗?
答案 0 :(得分:6)
此谓词格式字符串应该起作用:
@"NONE %@.units == code", self.answers
将其与适当的NSArray过滤方法结合使用。如果self.questions
是常规的不可变NSArray,它看起来像
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE %@.units == code", self.answers]
NSArray *results = [self.questions filteredArrayUsingPredicate:predicate];
如果它是NSMutableArray,则适当的用法是
[self.questions filterUsingPredicate:predicate];
但要注意最后一个,它会修改现有数组以适应结果。如果需要,您可以创建数组的副本并过滤副本以避免这种情况。
参考:
NSArray Class Reference
NSMutableArray Class Reference
Predicate Programming Guide
答案 1 :(得分:0)
查看Apple提供的使用predicates with arrays的示例。它使用filteredArrayUsingPredicate。