我找不到使用NSPredicate
字符串获取数组中 n 项的方法。例如:
//You cannot touch or modify the code inside this method. You can only use the predicate string param to filter the array.
- (NSArray *)filterUsingNSPredicate:(NSString *)PredicateString
{
NSArray *array = @[
@"firstItem",
@"secondItem",
@"thirdItem",
@"fourthItem",
];
NSPredicate *pred = [NSPredicate predicateWithFormat:PredicateString];
NSArray *filtered = [array filteredArrayUsingPredicate:pred];
NSLog(@"This is the second item in the array! %@",filtered); //Thats the only thing in the array.
return filtered;
}
答案 0 :(得分:0)
如果你想获得一件物品,你就不会收到NSArray,因为你只会收到一件物品。
您可以使用NSPredicate按数组中对象的名称进行搜索。但是你说的,那不是你想要的。
您可以使用[array objectAtIndex:index];
,返回您在索引中指定位置的对象。
如果你想要一个对象的索引,你可以使用[array indexOfObject:object];
,它返回对象的索引。
答案 1 :(得分:0)
谓词不了解数组索引。他们只知道他们在任何时候出现的单个对象,以及该对象是否使谓词成为真或假。
你在评论中提出这个问题的方式绝对没有意义。如果您可以获得该阵列的过滤版本,那么您可以获得该阵列。以下是您使用所示方法的方法:
NSArray * fullList = [theAPI filterUsingNSPredicate:@"TRUEPREDICATE"];
始终评估为true的 TRUEPREDICATE
is a special value for predicate strings。使用该谓词过滤数组时,结果将与原始数据相同。
您现在拥有对数组的引用,并且可以像平常一样对其进行索引。
答案 2 :(得分:0)
您可以像这样使用块https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/#//apple_ref/occ/clm/NSPredicate/predicateWithBlock%3A创建谓词以获得第6个元素(从0开始的索引5):
__block NSInteger index = 0;
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary<NSString *, id> *bindings)(
return index++ == 5;
)];