【问题标题】:CoreData: Storing (and sorting by) a vector of floating point numbersCoreData:存储(和排序)浮点数向量
【发布时间】:2009-11-18 00:23:06
【问题描述】:

我正在使用 CoreData 构建一个应用程序,这将要求我针对一个实体的实例存储一个浮点数数组,然后在它们各自的矩阵之间按照(比如说)manhattan distance 的顺序获取这些实体的选择.

这是一个粗略的图表,类似于我的意思:

Entity: {
  name: 'instance 1',
  data: [ 0.1, 0.2, 0.1, 0.1, 0.05, ... ]
},
Entity: {
  name: 'instance 2',
  data: [ 0.4, 0.9, 0.1, 0.1, 0.02 ... ]  // want to sort using this data
}

我知道可以为“数据”使用“可转换”属性,并对 NSArray 进行编码,但我不认为可以在获取或排序查询中使用该数组的内容。

所以,我的问题是:我有什么选择来构建它?是否有可能以某种方式扩展 CoreData 以允许我执行向量计算作为“获取”请求的一部分?还是我必须将每个对象加载到内存中然后手动排序?..

最终我试图找到最有效的选择,因为我希望处理数千个实例,每个实例都有一个 10-20 项特征向量。

CoreData 新手将不胜感激有关此处可能架构的任何建议;-)

如果我的框架不够清楚,请告诉我,我会尝试详细说明。

【问题讨论】:

  • 实际上,在对此进行了实验后,我发现使用编码的 NSArray(作为“可转换”属性)比我目前想象的更有效

标签: objective-c macos core-data


【解决方案1】:

我将创建一个名为 VectorEntry 的新实体,具有两个属性:

  • 数据(浮点数)
  • 排序(Int16)

然后,在您的主 Vector 实体中,与 VectorEntity 建立一对多关系(这是由 CoreData 实现的 NSSet,因此需要添加排序)。您还可以将 VectorEntity 实现为双向链表(Vector 与开始和/或结束是一对一的关系)。

在您的 VectorEntry 获取请求中,使用“排序”键路径指定排序描述符,然后将返回正确的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多