使用NSPredicate按索引过滤

时间:2018-10-26 12:28:14

标签: objective-c nspredicate

基本上,我要做的是:

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

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

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

当然, @“ Foo” @“ Bar” 实际上是未知值(甚至可以是字典或数字)。有可能实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

我通过在predicateWithBlock:上使用NSPredicate方法来解决此问题:

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数组中的对象必须唯一才能正常工作,这并不完美。