objective-c - 使用 NSPredicate 按索引过滤
问题描述
基本上,我想做的是:
NSArray *objectsAtIndex1 = @[[@[@"Foo", @"Bar"] objectAtIndex:1]];
但NSPredicate
改为使用,所以它看起来像这样(但这不起作用):
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF[1] != null"]
NSArray *objectsAtIndex1 = [@[@"Foo", @"Bar"] filteredArrayUsingPredicate:predicate]
当然,@"Foo"和@"Bar"实际上是未知值(甚至可能是字典或数字)。有可能实现这一目标吗?
解决方案
我通过使用这样的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 中的对象需要是唯一的才能工作,这并不完美。
推荐阅读
- sql-server - DBMS 和数据库 IDE 有什么区别?
- java - 如何从终端运行 Java public static void main
- java - 内存中存储和处理大型数据列表 Spring Boot 2 java
- node.js - Google App Engine 使用带有 NodeJ 的套接字
- php - 如何配置 WAMP 和 Wordpress 以进行定期站点维护
- linux - 如何将文件名解析为时间戳?
- android - 片段内的Android DataBinding
- node.js - 同一应用程序上的 Google App Engine 两个端口
- python - Python 3 kivy 属性错误
- azure-active-directory - Azure Active Directory - 清除令牌缓存