搜索最接近的核心数据

时间:2018-01-16 20:35:27

标签: ios swift core-data nspredicate

目前我们有一个包含r,g,b多个值的数据库,分为自己的属性。例如:

 r = type float
 g = type float
 b = type float

每个r,g和b属性都有多个值。  从外部源获取浮点数后,我们要搜索数据库以返回与该浮点数最接近的数字的属性。 (例如,对于r,如果我们得到199的值,将返回最接近199的r值)。

我知道有一些谓词可以像:"text CONTAINS[c] %@"一样使用,但我没有看到任何最接近值的谓词'。

1 个答案:

答案 0 :(得分:0)

您可以在请求中使用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