2013-03-08 53 views
1

在D3中,我需要將加載實驗室樣本可視化爲8行x 12列或類似的塑料2D平板。 有時候我會一次加載一行,有時候我會加載一列,偶爾會加載平坦的1D 0..95或其他排序。 基數D3 data()結構應該將行嵌套在列中(還是反之),還是應該保持一維?表示按行優化的列數據vs列與平坦

表示針對列[columns [rows []]優化的數據使得在按行加載時代碼複雜,反之亦然。將其表示爲平面[0..95]是通用的,但需要計算2D模式的所有行和列參考。我寧願將所有的訂單都引用到一個共同的基礎上,但迄今爲止這是一個雙贏的主張。我傾向於一維平臺並進行數學運算。有雙贏嗎? 有沒有一種方法來參數化或顛倒順序,並對它們進行優化?

回答

0

我相信你的情況下,最好的實施將是一個Associative array(具體來說,一個hash table實施)。鍵將是座標,值將是您存儲的數據。根據您的編程語言,您需要以某種方式處理密鑰。

實施例:

[0,0,0] -> someData(1,2,3,4,5) 
[0,0,1] -> someData(4,2,4,6,2) 
[0,0,2] -> someData(2,3,2,1,5) 

使用一個簡單的關聯數組會給你大插入速度和讀速度,但是,如果需要的數據塊的一些複雜的選擇代碼將變得一團糟。在這種情況下,使用某些數據庫可能是合理的(雖然比關聯數組的hashmap實現要慢)。它可以讓你批量查詢一些特定的數據。例如,你可以使用一個簡單的查詢中獲取數據的整行(或幾行):

SELECT * FROM data WHERE x=1 AND y=2 ORDER BY z ASC 

或者,假設從3D數據的中間選擇一個2x2x2的立方體:

SELECT * FROM data WHERE x>=5 AND x <=6 AND y>=10 AND Y<=11 AND z >=3 AND z <=4 ORDER BY x ASC, y ASC, z ASC 

編輯: 另一個想法是,如果尺寸的大小在運行時不會改變 - 您應該使用所有數學自己的1維數組,因爲它是最快的解決方案。如果嘗試將三維數組初始化爲數組數組,則每次對元素進行讀/寫操作都需要在內存中追加2次跳轉才能找到所需的地址。然而,編寫一些功能,如:

int pos(w,h, x,y,z) {return z*w*h+y*w+x;} //w,h - dimensions, x,y,z, - position 

會讓它由大多數編譯器內聯,並且相當快。