搜索核心数据以获得最接近的值
Search core data for closest value
目前我们有一个数据库,其中包含 r、g、b 的多个值,拆分成自己的属性。例如:
r = type float
g = type float
b = type float
每个 r、g 和 b 属性将有多个值。
从外部来源获得浮点数后,我们希望在数据库中搜索 return 与该浮点数最接近的属性。 (例如,对于 r,如果我们得到 199 的值,则值最接近 199 的 r 值将被 returned)。
我知道有些谓词可以像这样使用:"text CONTAINS[c] %@"
但我没有看到 'closest value'.
的任何谓词
您可以在请求中使用 NSSortDescriptor(key: "name_key", ascending: true)
。
let request1 = NSFetchRequest<NSFetchRequestResult>() // use correct constructor
let sortDescriptor = NSSortDescriptor(key: "name_key", ascending: true)
let sortDescriptors = [sortDescriptor]
request1.sortDescriptors = sortDescriptors
let predicate1 = NSPredicate(format: "text < %@", value)
request1.predicate = predicate1
// use this request1 to fetch from core data
let request2 = NSFetchRequest<NSFetchRequestResult>() // use correct constructor
request2.sortDescriptors = sortDescriptors
let predicate2 = NSPredicate(format: "text > %@", value)
request2.predicate = predicate2
// use this requst2 to fetch from core data
然后你可以使用predicate
两次:
第一次使用格式 text < %@
并使用数组的最后一项。
和
第二次使用格式 text > %@
并使用数组的第一项。
将两次迭代中第一项和最后一项的差异与给定值进行比较,看看谁的差异较小。那将是最接近的值。
如果你不知道如何从核心数据中获取数据,你可以关注Fetching Objects
目前我们有一个数据库,其中包含 r、g、b 的多个值,拆分成自己的属性。例如:
r = type float
g = type float
b = type float
每个 r、g 和 b 属性将有多个值。 从外部来源获得浮点数后,我们希望在数据库中搜索 return 与该浮点数最接近的属性。 (例如,对于 r,如果我们得到 199 的值,则值最接近 199 的 r 值将被 returned)。
我知道有些谓词可以像这样使用:"text CONTAINS[c] %@"
但我没有看到 'closest value'.
您可以在请求中使用 NSSortDescriptor(key: "name_key", ascending: true)
。
let request1 = NSFetchRequest<NSFetchRequestResult>() // use correct constructor
let sortDescriptor = NSSortDescriptor(key: "name_key", ascending: true)
let sortDescriptors = [sortDescriptor]
request1.sortDescriptors = sortDescriptors
let predicate1 = NSPredicate(format: "text < %@", value)
request1.predicate = predicate1
// use this request1 to fetch from core data
let request2 = NSFetchRequest<NSFetchRequestResult>() // use correct constructor
request2.sortDescriptors = sortDescriptors
let predicate2 = NSPredicate(format: "text > %@", value)
request2.predicate = predicate2
// use this requst2 to fetch from core data
然后你可以使用predicate
两次:
第一次使用格式 text < %@
并使用数组的最后一项。
和
第二次使用格式 text > %@
并使用数组的第一项。
将两次迭代中第一项和最后一项的差异与给定值进行比较,看看谁的差异较小。那将是最接近的值。
如果你不知道如何从核心数据中获取数据,你可以关注Fetching Objects