2012-03-29 68 views
0

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

您可以在您的阵列上使用 - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate检索新的fi过滤阵列。

要创建谓词使用:(NSPredicate *)predicateWithFormat:(NSString *)format, ...

例如为:

NSString* searchName = @"Ahmad"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", searchName]; 
NSArray* filteredPersons = [productArray filteredArrayUsingPredicate:predicate]; 
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

2

使用谓词来从阵列特定对象这样

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName == '%@'", nameObject]; 
[productArray filterUsingPredicate:predicate]; 

它会删除其它对象不必姓氏作为nameObj

NSMutableArray *list = [productArray filteredArrayUsingPredicate:predicate]; 

此声明将提供具有所有personDetail对象的数组。姓氏为nameObj

0

如果有人需要这个,这里是一个例子 - 希望它帮助。

假设你有一个数组allMovies &你正在寻找它的特定电影someMovie并想获得它的索引在数组中。作为来自JSON服务的示例,allMovies是电影词典的阵列。

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); 
相关问题