CoreData: хранение (и сортировка) вектора чисел с плавающей запятой - PullRequest
1 голос
/ 17 ноября 2009

Я создаю приложение с использованием CoreData, которое потребует от меня сохранить массив чисел с плавающей запятой для экземпляров сущности, а затем извлечь выборку этих сущностей в порядке (скажем) манхэттенского расстояния между соответствующими матрицами.

Вот примерная схема чего-то вроде того, что я имею в виду:

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, чтобы я мог выполнять векторные вычисления как часть запроса 'fetch'? Или мне придется загружать каждый объект в память, а затем сортировать вручную? ..

В конечном итоге я пытаюсь найти наиболее эффективный вариант, потому что я рассчитываю иметь дело с тысячами экземпляров, каждый из которых имеет вектор признаков из 10-20 элементов.

Любые предложения относительно возможной архитектуры здесь будут оценены новичком CoreData; -)

Пожалуйста, дайте мне знать, если я не сформулировал это достаточно четко, и я попытаюсь уточнить.

1 Ответ

2 голосов
/ 17 ноября 2009

Я бы создал новую сущность под названием VectorEntry с двумя атрибутами:

  • данные (Float)
  • сортировка (Int16)

Тогда в вашей основной сущности Vector есть отношение ко многим с VectorEntity (это реализовано в виде NSSet от CoreData, поэтому необходимо добавить сортировку). Вы также можете реализовать VectorEntity в виде двусвязного списка (Vector будет иметь отношение «один к одному» с началом и / или концом).

В ваших запросах на выборку VectorEntry укажите дескриптор сортировки, используя путь ключа «sort», и будет возвращен правильный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...