我知道目前无法在不加载所有数据并在代码中手动执行的情况下在Core Data中找到最近的地理位置,
但它至少可以用简单的数字吗?
例如,我可以使用包含条目的表格,其值为1, 2.5, 4
,我搜索3.6
并使用4
取回条目吗?
我指的是一个fetchRequest,它带有一个NSPredicate,可以完成SQL中的工作,因此不必加载对象并将其转换为Swift / Objective-C对象,如果你有类似的东西,这可能非常昂贵100&000; 000条目。
我无法在NSPredicate中找到任何内容,所以我认为它不可能吗?这是对的吗?!
答案 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
值最接近但小于所需值的对象。然后,您必须选择哪些对象实际上具有最接近的值。