2011-12-30 18 views
15

私はJavascriptに関する本を読んでいて、この行を見ていました。真の多次元配列は何ですか?

JavaScriptは真の多次元配列をサポートしていませんが、 は配列の配列で近似できます。

どのような違いがありますか?強制長さのようなJavaScriptで何もありません

答えて

17

真の多次元配列は、複数のインデックスで索引付けする必要があります。配列の配列は、別の配列を返す単一のインデックスでインデックスできます。真の多次元配列はすべてのデータを連続して格納します。配列の配列は、任意の周囲に散らばっているすべての構成配列を格納します。これにより、真の配列のキャッシュ効果のために繰り返しのパフォーマンスが向上します。一部の言語で

+0

+1詳細で明瞭です。 – alex

+0

単一のインデックスを使用して「行」を取得できる配列が存在し、すべてのデータを連続して格納する配列が存在する場合、必ずしも真の多次元ではありませんか?言い換えれば、これらの制約の両方を実際に満たさなければならないのか、後者のみを満たす必要があるのか​​? – kojiro

+3

JavaScriptでは、2次元配列の行には同じ数の列があるという強制はありません。 – Pointy

2

...

var arr = new Array[5][3]; /* Some weird JS/C-like thing for demonstration */ 

...。行列のように。

ただし、Arrayのメンバーはすべて固定長のArrayです。サブArrayの1つが異なる長さを有する場合、それはギザギザArrayとなります。

3

@recursiveの優れanswerを補完視覚的説明)

(C#)との両方が存在します。違いは、そのような配列の「形」にあります。

int[3, 4] // true two-dimensional array 

// it will "look" like this, rectangular shape 
[[0, 0, 0, 0] 
[0, 0, 0, 0] 
[0, 0, 0, 0]] 

しかし、配列の配列を定義すると、簡単に(特にjavascriptで)このように見えます。それはjagged arrayと呼ばれます。

[[0, 0] 
[0, 0, 0, 0, 0, 0] 
[0, 0, 0]] 
+0

MSDNの記事は明らかでした。ありがとう。 – Sinan

1

JavaScriptの仕様(3.0)は多次元配列の言及していませんが、彼らは実際には可能です。多次元配列は配列の配列で表現できます。 See

たとえば、

var items = [[1,2],[3,4],[5,6]]; 
alert(items[0][0]); // Would alert 1 

1次元配列をJavascriptで指定します。

var a = [0, 1, 2, 3]; 
a[[2]] === a[2]; // this is true 

2 == [2] //true 
// Even complex 
2 == [[[2]]] //true 

// And even more 
var a = { "xyz" : 1 }; 
a[[[["xyz"]]]] === a["xyz"]; //true 
2

著者は、「真の」多次元配列のすべての要素一つであることを前提としているようだ:

  • が配列されています。

  • 参考文献ではなく値で保存されています。および

  • 同じ長さです。

JavaScript配列は他の配列を含んではなく、値によって、参照のみによってもよいです。つまり、各行の要素はメモリ内で連続している可能性がありますが、行自体はできません。さらに、JavaScriptが動的に型付けされるので、内部配列のすべてが同じ長さでなければならないことを静的に示す方法はありません。

しかし、配列の配列は、JavaScriptで多次元配列を表現するために使用すべきものであり、言語を学んだだけでは内部表現の詳細はおそらくあなたとは関係ありません。