2013-02-27 89 views
0

我在JavaScript中有一個n * n * n數組,其中我需要執行很多訪問。在JavaScript中訪問多維數組的最有效方法

我不需要按順序訪問所有元素,只需要在特定位置。如果可能的話,我也希望在使用之前不要分配數組單元的所有內存(其他數據直接需要幾MB內存)。

我正在尋找最有效的方法。 我試圖使用由內置鍵(x +'#'+ y +'#'+ z)索引的詞典,但它的效率不夠高。

你能提出一些其他有效的方法來實現這一目標嗎?

+1

'yourArray [0] [1] [2]'有什麼問題? – 2013-02-27 20:45:40

+2

@RocketHazmat顯然效率不夠高;;) – jondavidjohn 2013-02-27 20:46:01

+0

字典方法效率不夠高?我對你有壞消息:沒有更好的方式來訪問數據(至少在一般情況下)。順便說一句:幾MB的內存對於現在的計算機來說是沒有任何**的。 :D – freakish 2013-02-27 20:46:56

回答

1

恐怕沒有比字典方法更快速的訪問對象的方法,因爲這就是Javascript中的一切。爲了不分配內存,你可以使用一個對象而不是一個數組:

var x = {}; 
var key = x + '#' + y + '#' + z; 
x[key] = 'some value'; 

這將至少給你記憶的關注,但我不知道它真的太大的關注。 (另外,我甚至不確定如果使用數組,它將分配內存,因爲我不熟悉Javascript中的內存分配)。

+0

問題是內存如何被字典分配。如果數組打包和訪問的數量不是太多,那麼數組可能會好得多。 – Bergi 2013-02-27 21:59:47

+0

它們在RAM中如何表示?即使數組使用'instanceof'對象,也有很多不同。此外,多維查找(無論數組還是對象)與您建議的一維非常不同。 – Bergi 2013-02-27 22:06:13

+0

我不知道它們在RAM中如何表示。你能聯繫我進行討論嗎?那真的很有趣。此外,根據他的描述,我不認爲他實際上需要多維查找,因爲他說他不需要按順序查看它,只是在特定的點。 – 2013-02-27 22:08:49

0

我認爲你的多維數組非常好。如果創建的是稀疏的,它不會吃掉所有的內存,並且更像一個簡單的「字典」對象 - 您也可以使用嵌套對象。然而,我建議嵌套查找比在一個巨大的字典中更快,因爲散列函數變得更簡單,只需較少的密鑰。另外,從最裏面的維度加載或迭代完整數組的速度將明顯快於查詢巨大字典中的每個單個項目。畢竟,如果您實際上沒有遇到任何重要的性能問題,請使用您發現的易於編寫/讀取/使用的內容。

+0

如果我在數組[n-1] [n-1] [n-1]中輸入了一個布爾值,那麼我的數學正確值爲n = 1000,則分配3814 MB – naugtur 2013-03-02 09:09:44

+0

這是怎麼回事?我不認爲具有3個屬性的3個對象將需要超過幾十個字節。 – Bergi 2013-03-02 13:01:49

+0

我的不好,我計算了一個假設,你用一個元素填充了所有的數組,並且沒有清楚地說明它,無論如何'var a = []; a [1000] = true'應填滿1001 * 4字節的內存 – naugtur 2013-03-03 10:08:44