对象-过滤数组以返回字典,其中键包含NSMutableArray中列出的值?

时间:2018-10-15 23:12:44

标签: ios objective-c

我有一个数组(allFriends),该数组返回许多字典(大约50个人的数据)。每个字典都包含键“ uid”。我想过滤allFriends,以便返回其中uid包含数字1,2,3或4的所有字典

我该怎么做?我要过滤的数字以数组形式返回,并按如下方式获取:

NSMutableArray *friendUIDs = [self.friendData valueForKey:@"uid"];

这将返回数据为:"1, 2, 3, 4"

但是不管我尝试什么(认为NSPredicate都是可行的方式),我的代码似乎不想让我用逗号分隔的多个值进行过滤?

 NSArray *filteredData = [self.allFriends filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(uid contains[c] %@)", friendUIDs]];

希望我的措词正确。

1 个答案:

答案 0 :(得分:0)

您的最终谓词应如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.uid contains[c] %@ OR SELF.uid contains[c] %@", @"1",@"2"];

如果我正确理解了这个问题,这应该可以工作:

NSMutableArray *friendUIDs = [self.friendData valueForKey:@"uid"];
NSMutableString *predicateString = [NSMutableString string];
for (NSInteger i = 0; i < [friendUIDs count]; i++) {
    if (i != 0) {
        [predicateString appendString:@" OR "];
    }
    [predicateString appendFormat:@"SELF.uid contains[c] '%1$@'", friendUIDs[i]];
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
NSArray *filteredData = [allFriends filteredArrayUsingPredicate:predicate];