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

标签 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"];

抛出异常。

我运气不好吗?

最佳答案

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

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

引用:
NSArray Class Reference
NSMutableArray Class Reference

关于iphone - 使用谓词过滤数组中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365713/

相关文章:

arrays - 我如何在 GoLang 中创建一个可以容纳多种数据类型的数组?

JavaScript 数组 - 查找 2 个元素的组合数

ios - 在 Swift 中解析 XML 文件

ios - 将数据转换为 Int64

iphone - 当我的应用程序未运行时,如何处理推送通知

iphone - 如何重置 iPhone 应用程序的钥匙串(keychain)?

iphone - 调用 stopUpdatingLocation 后紫色位置三角形不消失

iphone - 如果应用程序处于后台模式,则不会发送任何请求

javascript - 用于从变换矩阵中选择元素的正则表达式

ios - 从 NSUserDefaults 检索自定义对象