Gen*_*ari 5 objective-c nsset nspredicate ios
有没有办法做到这一点?我有一组项目,我想从另一组中排除.我知道我可以循环遍历我的集合中的每个项目,只将它添加到我的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];
}
Run Code Online (Sandbox Code Playgroud)
这可以用谓词来完成吗?
这个谓词格式字符串应该工作:
@"NONE %@.units == code", self.answers
Run Code Online (Sandbox Code Playgroud)
将其与适当的NSArray过滤方法结合使用.如果self.questions是常规的不可变NSArray,它看起来就像
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE %@.units == code", self.answers]
NSArray *results = [self.questions filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
如果它是NSMutableArray,则适当的用法是
[self.questions filterUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
但要注意最后一个,它会修改现有数组以适应结果.您可以创建数组的副本并过滤副本以避免这种情况(如果需要).
参考:
NSArray类参考
NSMutableArray类参考
谓词编程指南
| 归档时间: |
|
| 查看次数: |
6017 次 |
| 最近记录: |