2009-11-17 3 views
1

Je construis une application utilisant CoreData qui me demandera de stocker un tableau de nombres à virgule flottante par rapport aux instances d'une Entité, puis d'aller chercher une sélection de ces entités dans l'ordre du (par exemple) manhattan distance entre leurs matrices respectives.CoreData: Stockage (et tri par) un vecteur de nombres à virgule flottante

Voici un schéma approximatif de quelque chose comme ce que je veux dire:

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 
} 

Je sais qu'il est possible d'utiliser un attribut « transformables » pour « données », et coder un NSArray, mais je ne crois qu'il est possible d'utiliser le contenu de ce tableau dans les requêtes de recherche ou de tri. Donc, ma question est: quelles options ai-je pour construire ceci? Est-il possible d'étendre en quelque sorte CoreData pour me permettre d'effectuer les calculs vectoriels dans le cadre de la requête 'fetch'? Ou est-ce que je devrais charger chaque objet dans la mémoire et trier manuellement? ..

En fin de compte j'essaye de trouver l'option la plus efficace, parce que je m'attends à traiter des milliers de cas, chacun avec un 10-20 article vecteur de fonctionnalité.

Toutes les suggestions quant à l'architecture possible ici serait apprécié par un internaute novice CoreData ;-)

S'il vous plaît laissez-moi savoir si je ne l'ai pas assez sur ce point et encadré je vais clairement essayer d'élaborer.

+0

En fait, après avoir expérimenté avec cela, je trouve que l'utilisation d'un NSArray codé (comme un attribut 'transformable') pour être plus efficace que je l'avais imaginé pour le moment –

Répondre

2

Je voudrais créer une nouvelle entité appelée VectorEntry avec deux attributs:

  • données (float)
  • tri (Int16)

Ensuite, dans votre principale entité Vector, un à -la relation avec VectorEntity (implémentée comme un NSSet par CoreData, d'où la nécessité d'ajouter du tri). Vous pouvez aussi implémenter le VectorEntity comme une liste doublement chaînée (le vecteur aurait une relation un-un avec le début et/ou la fin).

Dans vos demandes de recherche VectorEntry, spécifiez un descripteur de tri à l'aide de la clé "sort" et un tableau approprié sera renvoyé.

Questions connexes