关于ios:在核心数据中搜索最接近的值

Search core data for closest value

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

1
2
3
 r = type float
 g = type float
 b = type float

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

我知道有一些谓词可以像这样使用:"text CONTAINS %@",但我没有看到任何用于 \\'closest value\\' 的谓词。


您可以在请求中使用 NSSortDescriptor(key:"name_key", ascending: true)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

核心数据入门