I am building an application using CoreData which will require me to store an array of floating point numbers against instances of an Entity, and then fetch a selection of these entities in order of the (say) manhattan distance between their respective matrices.
Here is a rough diagram of something like what I mean:
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
}
I know that it's possible to use a 'transformable' attribute for 'data', and encode an NSArray, but I don't believe it's possible to use the contents of that array in fetch or sorting queries.
So, my question is: what options do I have to build this? Is it possible to somehow extend CoreData to allow me to perform the vector calculations as part of the 'fetch' request? Or would I have to load every object into memory and then sort manually?..
Ultimately I am trying to find the most efficient option,开发者_C百科 because I expect to be dealing with thousands of instances, each with a 10-20 item feature vector.
Any suggestions as to the possible architecture here would be appreciated by a CoreData newbie ;-)
Please let me know if I have not framed this clearly enough and I will try to elaborate.
I would create a new entity called VectorEntry with two attributes:
- data (Float)
- sort (Int16)
Then, in your main Vector entity, have a to-many relationship with VectorEntity (this is implemented as an NSSet by CoreData, hence the need to add sorting). You could also implement the VectorEntity as a doubly linked list (Vector would have a to-one relationship with the start and/or end).
In your VectorEntry fetch requests, specify a sort descriptor using the "sort" key path and a proper array will be returned.
精彩评论