如何从数组中选择特定对象

时间:2012-03-29 10:21:38

标签: iphone nsmutablearray

我创建了一个数组,其中包含我在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];
}

4 个答案:

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