obj C语言 从 NSPredicate 获取 NSArray 中的索引列表



我有一个汽车数组,我正在根据包含字母i的对象对其进行过滤。

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil];
NSString *stringToSearch = @"i";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate
NSArray *results = [cars filteredArrayUsingPredicate:predicate];

results包含Maruthi,Hyundai .我希望results包含元素的索引,而不是元素,即0,1

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"BMW", @"Ford", @"Benz", @"Hyundai",@"Toyota",nil]; NSMutableArray * results = [[NSMutableArray alloc]init];

for(int i = 0;i<cars.count;i++)
{
    NSString * obj = [cars objectAtIndex:i];
    if([obj rangeOfString:@"i"].location == NSNotFound)
    {
        NSLog(@"Not Found");
    }
    else
    {
        int index = [cars indexOfObject:obj];
        [results addObject:[NSNumber numberWithInt:index]];
    }
}

为什么不使用

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate

还是类似的?

根据您的搜索条件,也许是这样的东西?

    NSArray *array = @[@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW", @"Toyota"];
    NSString *stringToSearch = @"i";
    NSIndexSet *set = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
       NSString *string = obj;
       if (([string rangeOfString:stringToSearch].location == NSNotFound))
       {
           return NO;
       }
       return YES;
    }];

最新更新