基于单独数组中的对象过滤 NSDictionaries 数组

Posted

技术标签:

【中文标题】基于单独数组中的对象过滤 NSDictionaries 数组【英文标题】:Filter Array of NSDictionaries Based on Objects in Separate Array 【发布时间】:2014-05-15 15:38:12 【问题描述】:

我有一组要过滤的 NSDictionaries。每个字典都包含对应于字符串对象的键“tid”。我想提取所有字典,它们的键“tid”对象不等于单独数组中包含的任何字符串对象。

例如,如果我有一个名为“stringObjects”的数组和一个名为“dictionaries”的字典数组,我想在伪代码中这样做:

for (NSString *string in stringObjects) 
 //if a dictionary in dictionaries contains a string object for it's key @"tid" which is NOT equal to *string, then put it in an array

我一直在尝试使用 NSPredicate 来执行此操作,但经过多次尝试后,我无法获得想要的结果。这是我最近尝试的代码(实际上似乎为数组中的每个字典创建了一个包含每个对象的数组,除了键 @"tid" 的对象):

NSSet *savedThreadIds = //set of strings

NSMutableArray *filtered = [NSMutableArray array];

for (NSString *threadId in savedThreadIds) 
      [filtered addObjectsFromArray:[arrayOfDictionaries filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(%K != %@)", @"tid", threadId]]];     

感谢任何帮助。

【问题讨论】:

【参考方案1】:

如果我正确理解您的答案,您正在寻找 NSCompoundPredicate:

NSMutableArray *predicates = [[NSMutableArray alloc] init];
for (NSString *string in stringObjects) 
    //Create an array of predicates
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT (tid CONTAINS[cd] %@)",string];
    [predicates addObject:pred];

//Create a compound predicate from predicate array, with format P1 AND P2 AND P3 etc.
NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
//Filter an your array using compoundPredicate.

【讨论】:

以上是关于基于单独数组中的对象过滤 NSDictionaries 数组的主要内容,如果未能解决你的问题,请参考以下文章

Angular2使用管道基于对象数组过滤对象数组

基于嵌套值的数组过滤对象数组

基于多值对象过滤javascript对象数组

基于对象属性的子数组过滤数组

typescript- 基于另一个数组过滤对象数组

PHP 过滤对象数组并返回新的对象数组,同时基于一个属性删除重复项