搜索核心数据以获得最接近的值

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

Getting started with core data