我有一个汽车数组,我正在根据包含字母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;
}];