我创建了一个数组,其中包含我在tableview中填充的人名,姓氏和号码。现在我想只显示姓氏等于“艾哈迈德”的那些人数据这可能是一个简单的问题,但我无法做到。任何帮助将不胜感激。这是我的代码。
- (void)viewDidLoad {
[super viewDidLoad];
productArray=[[NSMutableArray alloc]init];
PersonDetail *personObj = [[PersonDetail alloc] init];
personObj.firstName = @"Adeem";
personObj.lastName = @"Basraa";
personObj.phoneNumber = @"123456789";
[productArray addObject:personObj];
[personObj release];
PersonDetail *personObj = [[PersonDetail alloc] init];
personObj.firstName = @"Ijaz";
personObj.lastName = @"Ahmed";
personObj.phoneNumber = @"987654321";
[productArray addObject:personObj];
[personObj release];
PersonDetail *personObj = [[PersonDetail alloc] init];
personObj.firstName = @"Waqas";
personObj.lastName = @"Ahmad";
personObj.phoneNumber = @"45656789";
[productArray addObject:personObj];
[personObj release];
}
答案 0 :(得分:4)
你可以使用
数组上的- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
以检索新的过滤数组。
创建谓词用法:(NSPredicate *)predicateWithFormat:(NSString *)format, ...
。
E.g:
NSString* searchName = @"Ahmad";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", searchName];
NSArray* filteredPersons = [productArray filteredArrayUsingPredicate:predicate];
答案 1 :(得分:2)
使用谓词从数组中获取特定对象
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", nameObject];
[productArray filterUsingPredicate:predicate];
除了将姓氏作为nameObj
之外,它将删除该对象NSMutableArray *list = [productArray filteredArrayUsingPredicate:predicate];
此语句将给出一个数组,其中所有personDetail对象的lastName为nameObj
答案 2 :(得分:0)
您可以使用NSArray
超类中的以下方法:
- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate
此方法以块为参数,它基本上类似于为数组的每个元素调用的迷你函数。在您的块代码中,您可以将id obj
转换为PersonDetail
实例,然后检查名称是否等于“Ahmed”。找到要查找的PersonDetail
后,可以通过取消引用块的第三个参数来将stop
输出参数设置为true。*stop = YES
。
查看NSArray此方法的文档。如果您不熟悉块语法,您可能还想查看blocks programming guide。
答案 3 :(得分:0)
如果有人需要这个,这里有一个例子 - 希望它有所帮助。
假设你有一个阵列 allMovies &您正在搜索特定电影 someMovie ,并希望在数组中获取其索引。 allMovies是一个电影词典数组,作为JSON服务的一个例子。
NSUInteger theIndex = [self.allMovies indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
if ([[[obj objectForKey:@"movie"] objectForKey:@"id"] integerValue] == someMovie.id)
*stop = YES;
NSLog(@"IDX: %d", idx);
return *stop;
}];
NSLog(@"FOUND INDEX FOR SEARCHED OBJECT: %d", theIndex);