代码之家  ›  专栏  ›  技术社区  ›  turingtested

使用NSPredicate按索引进行筛选

  •  0
  • turingtested  · 技术社区  · 7 年前

    基本上,我想做的是:

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

    但是使用 NSPredicate 相反,它看起来是这样的(但是这不起作用):

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   turingtested    7 年前

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