2013-02-27 106 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