【问题标题】:How to get the object with the lowest property value from an NSArray如何从 NSArray 中获取具有最低属性值的对象
【发布时间】:2014-04-02 19:59:31
【问题描述】:

我有一个 CLLocation 对象数组。 如果我使用

CLLocation *bestLocation = [locations valueForKeyPath:@"@min.horizontalAccuracy"];

我得到了最低的 Horizo​​ntalAccuracy 值。但我想要包含最低值的 OBJECT,这样我以后可以得到它的正确坐标。我该怎么做?

我也试过

CLLocation *bestLocation = [locations valueForKeyPath:@"@min.self.horizontalAccuracy"];

但得到了相同的结果。

谢谢

【问题讨论】:

    标签: ios iphone objective-c key-value-coding


    【解决方案1】:

    我不认为有一个简单的键值编码方法,但你可以 遍历数组并跟踪“最佳”元素:

    CLLocation *bestLocation = nil;
    for (CLLocation *loc in locations) {
        if (bestLocation == nil || loc.horizontalAccuracy < bestLocation.horizontalAccuracy)
            bestLocation = loc;
    }
    

    【讨论】:

    • 好的,这听起来不错。如果我没有得到正确的 Key-Value 方法,我会选择你的答案作为正确的答案。谢谢!
    • 您实际上可以使用 NSPredicate 来完成此操作,方法是将限制设置为 1 项。 (或者就此而言,您可以对数组进行排序并以这种方式获取第一项)。不过,不确定是否值得为这种方法付出努力。
    • @Dima:首先确定最小值然后搜索匹配元素可能不太有效。 - 排序一个数组只是为了找到最小的元素也比一个简单的循环慢,比较stackoverflow.com/questions/15931112/…
    • 我 100% 同意排序,但效果肯定较差。虽然不确定 NSPredicate 方法,并且该线程似乎没有解决它。
    • @Dima:如果您正在考虑(核心数据)获取请求,那么您是完全正确的:获取限制为 1 和排序描述符的获取请求将成为最好的方法。 - 但这个问题是关于 array 的,我还没有看到如何在这里使用谓词。我忽略了什么吗?
    猜你喜欢
    • 2022-01-07
    • 2017-09-20
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    相关资源
    最近更新 更多