首页 > 解决方案 > 使用 NSPredicate 按索引过滤

问题描述

基本上,我想做的是:

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

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

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

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

标签: objective-cnspredicate

解决方案


我通过使用这样的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-array 中的对象需要是唯一的才能工作,这并不完美。


推荐阅读