2009-11-17 43 views
1

我正在構建一個使用CoreData的應用程序,這將要求我存儲一個浮點數對一個實體的實例,然後獲取這些實體的選擇按照它們各自矩陣之間的(比如)manhattan distance的順序。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以允許我執行矢量計算作爲「獲取」請求的一部分?或者我將不得不將每個對象加載到內存中然後手動排序?

最終,我試圖找到最有效的選項,因爲我期望處理數千個實例,每個實例都有一個10-20個項目特徵矢量。

爲這裏的可能架構任何建議,由CoreData新手;-)

請讓我知道如果我沒有陷害這顯然不夠,我會盡量詳細說明可以理解的。

+0

實際上,在對此進行實驗後,我發現使用編碼的NSArray(作爲'可變形'屬性)比我現在想象的更有效率 – 2009-11-25 16:04:26

回答

2

我會創建一個名爲VectorEntry新的實體有兩個屬性:

  • 數據(浮點)
  • 排序(Int16的)

然後,在你的主載體的實體,有一個以與VectorEntity的多種關係(這是由CoreData實現的NSSet,因此需要添加排序)。你也可以實現VectorEntity作爲一個雙向鏈表(Vector與開始和/或結束有一對一的關係)。

在您的VectorEntry提取請求中,使用「排序」鍵路徑指定排序描述符,並返回一個適當的數組。