如何在Objective-C中快速搜索对象数组

时间:2010-05-04 21:30:34

标签: objective-c cocoa search

如果属性是字符串类型,Objective-C中是否有一种方法可以通过包含对象的属性搜索对象数组?

例如,我有一个人物对象的NSArray。 Person有两个属性,NSString * firstName和NSString * lastName。

搜索数组以找到在firstName或lastName属性中的任何位置匹配'Ken'的所有人的最佳方法是什么?

4 个答案:

答案 0 :(得分:25)

尝试这样的事情:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName==%@ OR lastName==%@",@"Ken",@"Ken"];
NSArray *results = [allPersons filteredArrayUsingPredicate:predicate];

答案 1 :(得分:21)

答案 2 :(得分:2)

您只需使用 NSPredicate 从实际结果数组中过滤搜索结果:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.property_name contains[c] %@",stringToSearch];
filteredPendingList = [NSMutableArray arrayWithArray:[mainArr filteredArrayUsingPredicate:predicate]];
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"property_name"
                                                 ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [filteredPendingList sortedArrayUsingDescriptors:sortDescriptors];

因此,您将获得带有过滤结果的已排序数组。上面的 property_name 是您要在其上执行搜索操作的对象中的变量名称。希望它会对你有所帮助。

答案 3 :(得分:0)

您必须进行线性搜索,比较数组中的每个条目,看它是否与您要查找的内容相匹配。