NSArray 和 NSPredicate 使用 NOT IN

Posted

技术标签:

【中文标题】NSArray 和 NSPredicate 使用 NOT IN【英文标题】:NSArray with NSPredicate using NOT IN 【发布时间】:2012-01-24 17:27:34 【问题描述】:

我有一个 NSArray,我想使用 NSPredicate 过滤掉某些对象,我希望我可以使用 NOT IN,因为我看到我可以轻松地执行 IN。

所以我有我的数组:

self.categoriesList

然后我得到我想要删除的值:

NSArray *parentIDs = [self.cateoriesList valueForKeyPath:@"@distinctUnionOfObjects.ParentCategoryID"];

这为我提供了我不想显示的类别的 ParentCategoryID 列表,所以我想我可以使用 NSPredicate 来删除它们:

self.cateoriesList = [self.cateoriesList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"CategoryID NOT IN %@",parentIDs]];

这失败了:

reason: 'Unable to parse the format string "CategoryID NOT IN %@"'

如果我只想使用 IN 当然可以完美运行。

【问题讨论】:

【参考方案1】:

NONE怎么样?

[NSPredicate predicateWithFormat:@"NONE CategoryID IN %@", parentIDs];

【讨论】:

请注意,NONE 仅适用于对多关系。见***.com/questions/12127618/…【参考方案2】:

NOT (CategoryID IN %@) 呢?

【讨论】:

以上是关于NSArray 和 NSPredicate 使用 NOT IN的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 搜索 NSArray

使用 NSPredicate 过滤 NSDictionaries 的 NSArray

使用 NSPredicate 过滤 NSArray 并找到相似的字符串

使用 NSPredicate 根据 NSDictionary 键过滤 NSArray

如何使用 NSPredicate 过滤 NSArray

使用 NSpredicate 过滤 NSArray 的 Big-O 运行时