2014-03-26 56 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++; 
}