【问题标题】:NSPredicate on array of arraysNSPredicate 对数组的数组
【发布时间】:2012-12-07 16:56:06
【问题描述】:

我有一个数组,打印出来的时候是这样的:

( ( 数据库版本, 13 ), ( 锁定集ID, 100 ) )

是否可以使用NSPredicate 过滤它(可能通过数组中的索引)。就像这样:给我元素0是'databaseVersion'的所有行?我知道如果我有一个字典数组,我可以使用类似于 here 的谓词来做到这一点,但我发现当使用字典并存储大量数据时,我的内存消耗增加了(从 ~80mb 到~120mb),所以如果可能的话,我会保留这个数组。关于如何做到这一点有什么建议吗?

【问题讨论】:

    标签: objective-c nsarray nsdictionary nspredicate


    【解决方案1】:

    这可以在谓词中使用“SELF[index]”来完成:

    NSArray *array = @[
        @[@"databaseVersion", @13],
        @[@"lockedSetId", @100],
        @[@"databaseVersion", @55],
        @[@"foo", @"bar"]
    ];
    
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF[0] == %@", @"databaseVersion"];
    NSArray *filtered = [array filteredArrayUsingPredicate:pred];
    NSLog(@"%@", filtered);
    

    输出:

    (
            (
            databaseVersion,
            13
        ),
            (
            databaseVersion,
            55
        )
    )
    

    或者您可以使用基于块的谓词:

    NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(NSArray *elem, NSDictionary *bindings) {
        return [elem[0] isEqualTo:@"databaseVersion"];
    }];
    

    【讨论】:

    【解决方案2】:

    您只需在 NSPredicate 中使用 ANY

    一切正常

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", @"value"];
    

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF contains[cd] %@", @"value"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多