NSPredicate String获取数组中的第n项

时间:2016-04-22 18:44:09

标签: ios objective-c cocoa-touch nspredicate

我找不到使用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;
}  

3 个答案:

答案 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;
)];