objective-c – 对数组数组进行NSPredicate

我有一个数组,打印出来时看起来像这样:

(
        (
        databaseVersion,
        13
    ),
        (
        lockedSetId,
        100
    )
)

是否可以使用NSPredicate(可能通过数组中的索引)对其进行过滤.所以类似于:给我所有行,其中元素0是’databaseVersion’?我知道如果我有一个字典数组,我可以使用类似于here的谓词来做到这一点,但我发现当使用字典并存储大量数据时,我的内存消耗量上升了(从〜80mb到~120mb) ),所以如果可能的话我会保留阵列.关于如何做到这一点的任何建议?

最佳答案
这可以使用谓词中的“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"];
}];

转载注明原文:objective-c – 对数组数组进行NSPredicate - 代码日志