2014-03-26 55 views
0

我有一個屬性爲personName,lastName和age的通用人員對象。我將用戶輸入存儲到一個NSMutableArray中,我想通過他/她的名字在數組中找到一個下面的內容。我試圖找到一堆不同的解決方案,但沒有一個真的有效。在NSMutableArray中按名稱查找對象

這是我的main.m

@autoreleasepool { 
     char answer; 
     char locatePerson[40]; 
     //Create mutable array to add users for retrieval later 
     NSMutableArray *people = [[NSMutableArray alloc] init]; 

     do{ 
      Person *newPerson = [[Person alloc]init]; 
      [newPerson enterInfo]; 
      [newPerson printInfo]; 
      [people addObject:newPerson]; 

      NSLog(@"Would you like to enter another name?"); 
      scanf("\n%c", &answer); 

     }while (answer == 'y'); 

     NSLog(@"Are you looking for a specific person?"); 
     scanf("%c", locatePerson); 

     //This is where I need help 
     int idx = [people indexOfObject:] 

    } 

這是很基本的,但我是新來的Objective-C和我想嘗試並找到該用戶名。我見過的解決方案使用了indexesOfObjectsPassingTest方法。但我想知道如果我不能像我那樣用indexOfObject方法來定位一個人的名字嗎?

任何幫助表示讚賞。

+0

你知道,你可以寫一個循環來搜索'people'數組。 –

回答

3

這是您應該避免使用某些前期設計的難題之一。如果你知道你正在把東西放到一個集合類中,並且需要根據某個屬性(而不是按照插入的順序)再次取出它們,那麼字典是最有效的集合類。

您可以使用與Person的name屬性鍵合的NSDictionary。您仍然可以迭代所有對象,但是您將避免搜索整個集合。在NSArray中找到一個匹配的屬性可能需要很長時間!你甚至不需要改變你的Person對象,只要它們被創建成一個NSMutableArray就可以逐個添加它們。

0

假設'name'是Person類的一個屬性,你可以嘗試類似這樣的事情。

NSUInteger i = 0; 
for(Person *person in people) { 
    if([person.name isEqualToString:locatePerson]) { 
     break; 
    } 
    i++; 
}