在Core Data中查找最接近的数字而不迭代数据

时间:2017-12-15 12:06:28

标签: ios core-data

我知道目前无法在不加载所有数据并在代码中手动执行的情况下在Core Data中找到最近的地理位置, 但它至少可以用简单的数字吗? 例如,我可以使用包含条目的表格,其值为1, 2.5, 4,我搜索3.6并使用4取回条目吗?

我指的是一个fetchRequest,它带有一个NSPredicate,可以完成SQL中的工作,因此不必加载对象并将其转换为Swift / Objective-C对象,如果你有类似的东西,这可能非常昂贵100&000; 000条目。

我无法在NSPredicate中找到任何内容,所以我认为它不可能吗?这是对的吗?!

1 个答案:

答案 0 :(得分:3)

我能想到的最佳解决方案是使用这样的谓词来获取:

library(data.table)
dt <- data.table(df)
dt[, visit_no := cumsum(ifelse(shift(gap, n = 1, type = "lag", fill = 0)>1,1,0)) + 1, by = c("user", "itr")]
dt
#    user  gap itr visit_no
# 1:    a 0.30   1        1
# 2:    a 0.50   1        1
# 3:    a 1.50   1        1
# 4:    a 0.90   1        2
# 5:    a 2.60   1        2
# 6:    a 0.34   1        3
# 7:    a 0.80   2        1
# 8:    a 0.34   2        1
# 9:    b 1.60   1        1
#10:    b 0.70   1        2
#11:    b 0.80   1        2
#12:    b 0.70   1        2
#13:    b 4.80   2        1
#14:    b 0.39   2        2
#15:    b 0.76   2        2
#16:    b 0.72   2        2

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

attribute

但仅限于第一个结果:

fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:true)

这应该返回fetch.fetchLimit = 1 值最接近且大于或等于所需值的对象。

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

attribute

将返回fetch.predicate = NSPredicate(format:"attribute < 3.6") fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:false) fetch.fetchLimit = 1 值最接近但小于所需值的对象。然后,您必须选择哪些对象实际上具有最接近的值。