我有一个通用人物对象,其属性为personName,lastName和age。我将用户输入存储到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 :(得分:3)
这是您应该通过一些前期设计避免的难题之一。如果您知道要将内容放入集合类中并且需要根据某些属性(而不是按插入顺序)再次将它们删除,则字典是最有效的集合类。
您可以使用以Person的name属性为键的NSDictionary。您仍然可以迭代所有对象,但您将不必搜索整个集合。在NSArray中找到匹配的属性可能需要花费相当长的时间!您甚至不必更改Person对象,只需执行
NSDictionary *peopleDictionary = @{ person1.name : person1, person2.name : person2 };
或者在创建NSMutableArray时逐个添加它们。
答案 1 :(得分:0)
你可以尝试这样的假设' name'是您的Person类的属性。
NSUInteger i = 0;
for(Person *person in people) {
if([person.name isEqualToString:locatePerson]) {
break;
}
i++;
}