我有一个数组(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]];
希望我的措词正确。
答案 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];