使用谓词过滤数组中对象的属性

时间:2010-12-06 11:05:13

标签: iphone arrays ios properties predicate

我有一个对象数组,我想使用谓词进行过滤,但我无法弄清楚语法(或者是否不可能)。

假设该对象是位置,并且它具有纬度经度的属性。我有一个名为 allLocations 的数组,我想生成一个新的位置数组,其中纬度属性大于30。

获取托管对象时,您只需使用属性名称,但不能使用数组:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude > 30.0"];

没有返回匹配(尽管存在大量具有纬度> 30.0的位置对象。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.latitude > 30.0"];

也不好,而

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[SELF latitude] > 30.0"];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[location latitude] > 30.0"];

抛出异常。

我运气不好吗?

1 个答案:

答案 0 :(得分:2)

您正在寻找的是NSArray的filteredArrayUsingPredicate:方法。当您将其传递给该方法时,上面的第一个谓词尝试将正常工作。

值得注意的是,NSMutableArray使用不同的方法来实现类似的效果,filterUsingPredicate:。 MutableArray版本改变接收器,而Array版本返回一个新阵列。

参考:
NSArray Class Reference
NSMutableArray Class Reference