2012-03-29 92 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); 
相關問題