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

问题描述 投票:0回答:5

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

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

搜索数组以查找在firstName 或lastName 属性中任意位置匹配“Ken”的每个人的最佳方法是什么?

objective-c cocoa search
5个回答
29
投票

尝试这样的事情:

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

22
投票

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 是您要对其执行搜索操作的对象内的变量名称。希望对你有帮助。


1
投票

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


0
投票

这个

filteredArrayUsingPredicate
方法比较慢。

请参阅此处以获取更快捷的选项:

https://stackoverflow.com/a/21158730/42100

© www.soinside.com 2019 - 2024. All rights reserved.