如果我理解正确,您想创建一个新的 NSSet,其中包含 2 个不同 NSSet 共有的所有元素。
- (void)testTest
{
NSArray *a = @[ @"boris", @"bob", @"claire", @"x" ];
NSArray *b = @[ @"Boris", @"BOB", @"vince", @"y", @"x" ];
NSSet *userMusicTitles = [NSSet setWithArray:a];
NSSet *friendMusicTitles = [NSSet setWithArray:b];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF LIKE[cd] $STR"];
__block NSPredicate *blockPredicate = nil;
NSSet *commonMusic = [userMusicTitles objectsPassingTest:^BOOL(NSString *obj, BOOL *stop) {
blockPredicate = [predicate predicateWithSubstitutionVariables:@{ @"STR" : obj }];
return ([friendMusicTitles filteredSetUsingPredicate:blockPredicate].count > 0);
}];
NSLog(@"common music == %@", commonMusic);
}
其他选项。
NSMutableSet有- (void)intersectSet:(NSSet *)otherSet
方法。但它不会做LIKE[cd]
. 您必须已经以 [cd] 形式存储您的 NSString。
其他选项是循环遍历一个集合并在谓词中使用该值,然后将结果添加到最后将包含您的元素的 NSMutableSet。