使用NSPredcate按索引进行筛选



基本上,我想做的是:

NSArray *objectsAtIndex1 = @[[@[@"Foo", @"Bar"] objectAtIndex:1]];

但是使用NSPredicate,所以它看起来像这样(但这不起作用(:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF[1] != null"]
NSArray *objectsAtIndex1 = [@[@"Foo", @"Bar"] filteredArrayUsingPredicate:predicate]

当然,@"Foo">@Bar">实际上是未知值(甚至可能是字典或数字(。有可能做到这一点吗?

我在NSPredicate上使用predicateWithBlock:方法解决了这个问题,如下所示:

NSArray *fooBarArray = @[@"Foo", @"Bar"];
NSUInteger index = 1;
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
return [fooBarArray indexOfObject:evaluatedObject] == index;
}];
NSArray *objectsAtIndex1 = [fooBarArray filteredArrayUsingPredicate:predicate];

然而,有一点需要注意,fooBar数组中的对象需要是唯一的才能工作,这并不完美。

最新更新