Ios 在核心数据中查找最近的数字,而不迭代数据

Ios 在核心数据中查找最近的数字,而不迭代数据,ios,core-data,Ios,Core Data,我知道如果不加载所有数据并在代码中手动执行,目前无法在核心数据中找到最近的地理位置, 但这至少可以用简单的数字实现吗? 例如,我是否可以拥有一个包含条目的表,其值为1、2.5、4,我可以搜索3.6,然后返回包含4的条目 我指的是一个fetchRequest,带有一个NSPredicate,它已经在SQL中完成了这项工作,因此不必将对象加载并转换为Swift/Objective-C对象,如果您有大约100000个条目,这可能会非常昂贵 我在NSPredicate中找不到任何相关信息,所以我认为这是

我知道如果不加载所有数据并在代码中手动执行,目前无法在核心数据中找到最近的地理位置, 但这至少可以用简单的数字实现吗? 例如,我是否可以拥有一个包含条目的表,其值为
1、2.5、4
,我可以搜索
3.6
,然后返回包含
4
的条目

我指的是一个fetchRequest,带有一个NSPredicate,它已经在SQL中完成了这项工作,因此不必将对象加载并转换为Swift/Objective-C对象,如果您有大约100000个条目,这可能会非常昂贵


我在NSPredicate中找不到任何相关信息,所以我认为这是不可能的?对吗

我能想到的最佳解决方案是使用如下谓词获取:

fetch.predicate = NSPredicate(format:"attribute >= 3.6")
属性排序
升序:

fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:true)
但仅限于第一个结果:

fetch.fetchLimit = 1
这将返回属性值最接近且大于或等于所需值的对象

然后重复提取,但谓词和排序顺序颠倒:

fetch.predicate = NSPredicate(format:"attribute < 3.6")
fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:false)
fetch.fetchLimit = 1
fetch.predicate=NSPredicate(格式:“属性<3.6”)
fetch.sortDescriptors=[NSSortDescriptor(键:“属性”,升序:false)
fetch.fetchLimit=1

它将返回属性值最接近但小于所需值的对象。然后,您必须选择哪些对象实际具有最接近的值。

首先转换值,然后搜索最接近的值,4在您的情况下如何?@pmk什么意思?很麻烦,但实际上没有那么糟糕。Nice正在思考。仍然希望有一种比:2*(SQL fetch+对象映射)更高效的方法+1*代码计算我甚至在使用索引属性时也尝试过这个方法,实际上比传统的二进制搜索慢得多。因此我希望这个问题有一个更好的答案。:-/我放弃了,接受了你的答案。你做得很好,苹果的人没有。@Jan我同意-以上是一个笨拙的解决方案。如果苹果能扩展它,那就好了可能的谓词和排序描述符-您想要的几乎不寻常。几乎不寻常是一种轻描淡写的说法。如果您有例如时间间隔时间戳,您会多久搜索一次类似于1294.21784835秒的东西?几乎没有意义,编程中几乎从不精确比较浮点数是101-/