Kyl*_*yle 4 objective-c nsdictionary nsarray nspredicate
我有一个数组,打印出来时看起来像这样:
(
(
databaseVersion,
13
),
(
lockedSetId,
100
)
)
是否可以使用NSPredicate(可能通过数组中的索引)对此进行过滤.所以类似于:给我所有行,其中元素0是'databaseVersion'?我知道如果我有一个字典数组,我可以用类似于这里发现的谓词来做这个,但我发现当使用字典并存储大量数据时,我的内存消耗量上升了(从〜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);
Run Code Online (Sandbox Code Playgroud)
输出:
(
(
databaseVersion,
13
),
(
databaseVersion,
55
)
)
Run Code Online (Sandbox Code Playgroud)
或者您可以使用基于块的谓词:
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(NSArray *elem, NSDictionary *bindings) {
return [elem[0] isEqualTo:@"databaseVersion"];
}];
Run Code Online (Sandbox Code Playgroud)
只需在NSPredicate中使用ANY即可:
它的工作正常
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", @"value"];
Run Code Online (Sandbox Code Playgroud)
要么
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF contains[cd] %@", @"value"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |