我有这个自定义类:
@interface MyModel : NSObject
@property (nonatomic,strong) NSString *id_name;
@property (nonatomic,strong) NSArray *genres;
@end
genres数组是NSNumber
s的数组。我使用MyModel
对象填充另一个数组,例如:
MyModel *m = [[MyModel alloc] init];
m.id_name = @"2345";
m.genres = [NSArray arrayWithObjects:[NSNumber numberWithInt:3],[NSNumber numberWithInt:5],nil];
MyModel *m2 = [[MyModel alloc] init];
m2.id_name = @"259";
m2.genres = [NSArray arrayWithObjects:[NSNumber numberWithInt:7],[NSNumber numberWithInt:10],nil];
MyModel *m3 = [[MyModel alloc] init];
m3.id_name = @"25932as";
m3.genres = [NSArray arrayWithObjects:[NSNumber numberWithInt:7],[NSNumber numberWithInt:10],[NSNumber numberWithInt:15],nil];
myArray = [NSArray arrayWithObjects:m,m2,m3,nil];
现在我要过滤myArray
,以便类型包含在此数组的元素中:
NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInt:7],[NSNumber numberWithInt:10],nil];
因此,myArray
在过滤后应包含对象m2
和m3
。我可以使用NSPredicate
执行此操作吗?如果是这样,怎么样?或者还有另一种方式吗?
答案 0 :(得分:1)
Martin R提供了一个优雅的答案,但如果我理解你的问题,你也可以使用更简单的谓词:
NSPredicate *allPred = [NSPredicate predicateWithFormat: @"ALL %@ IN genres", a];
NSArray *result = [myArray filteredArrayUsingPredicate: allPred];
此谓词将找到包含<{1}}数组中包含的所有类型的MyModel
个。对于测试数据,这将是具有ID a
和259
的两个对象。
答案 1 :(得分:0)
要查找给定数组a
中至少一个类型的对象,请使用
[NSPredicate predicateWithFormat:@"ANY genres in %@", a];
要查找给定数组中具有所有类型的对象,需要使用SUBQUERY:
[NSPredicate predicateWithFormat:@"SUBQUERY(genres, $g, $g IN %@).@count = %d", a, [a count]];
(想法是检查给定数组中的类型数是否相等 到数组的大小。)