在NSMutableArray中按名称查找对象

时间:2014-03-26 01:30:31

标签: ios objective-c nsmutablearray

我有一个通用人物对象,其属性为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方法来找到一个名字的人?

感谢任何帮助。

2 个答案:

答案 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++;
}