0

我有这个自定义类:

@interface MyModel : NSObject

@property (nonatomic,strong) NSString *id_name;
@property (nonatomic,strong) NSArray *genres;

@end

流派数组是一个NSNumbers 数组。我用对象填充另一个数组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过滤后,应该包含对象m2m3。我可以这样做NSPredicate吗?如果是这样,怎么做?还是有其他方法?

4

2 回答 2

1

Martin R 提供了一个优雅的答案,但如果我正确理解您的问题,您也可以使用更简单的谓词:

NSPredicate *allPred = [NSPredicate predicateWithFormat: @"ALL %@ IN genres", a];

NSArray *result = [myArray filteredArrayUsingPredicate: allPred];

该谓词将找到MyModel包含数组中所有类型的s。a对于您的测试数据,这将是具有 ids25925932as.

于 2013-08-23T22:34:09.133 回答
0

要在给定数组中查找至少具有一种a类型的对象,请使用

[NSPredicate predicateWithFormat:@"ANY genres in %@", a];

要在给定数组中查找具有所有类型的对象,需要一个 SUBQUERY:

[NSPredicate predicateWithFormat:@"SUBQUERY(genres, $g, $g IN %@).@count = %d", a, [a count]];

(这个想法是检查给定数组中的流派数量是否等于数组的大小。)

于 2013-08-23T22:05:07.670 回答