-4

なぜ二次元配列が必要なのか疑問に思っています。私はそれらを学んだばかりですが、使用するのに役立つとは思いません。お答えください!皆さんの回答をよろしくお願いします。

4

1 に答える 1

4

JavaScript には 2 次元配列はありませんが、非常によく似たものがあります: 配列の配列です。2 次元配列や配列の配列などが必要な理由は、それらを使用して 2 次元のものを表現するためです。たとえば、チェスでは、ゲーム ボードは 2 次元です。つまり、幅と奥行き (考え方によっては高さ) があります。[x][y]したがって、インデックスを作成できるように表現することは理にかなっています。

var board = [
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
];

これで空白の 8x8 チェス盤ができました。P白いポーンの を 6,2 の位置に置きたい場合は、次のようにします。

board[6][2] = 'P';

私にこれを与える:

[
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', 'P', ' ', ' ', ' ', ' ', ' '],
    [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
]

これは、1 次元配列で物事を追跡し、常にボードの幅を掛けるよりもはるかに簡単です。1 次元の代替案を考えてみましょう。

var board = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '];

Ponを付けたい場合は、次の6,2ようにする必要があります。

board[(6*8)+2] = 'P';

真の 2 次元配列の場合、これは主にプログラマの利便性の問題です。

しかし、配列の配列の場合は、それよりも興味深い: 外側の配列内の配列は異なる長さになるか、(配列の配列を行うほとんどの言語では) 完全に欠落している可能性があります。

var anArrayOfArrays = [
    [1, 2, 3, 4],
    [1, 2],
    null,
    [1, 2, 3, 4, 5, 6, 7, 8]
];

これは非常に便利な場合があります — もちろん、チェス盤を表す場合ではありません。:-) ただし、箱型ではないものを表す場合。配列の配列は 2 次元配列の仕事を行うことができますが、他の興味深い仕事も行うことができます。

もちろん、それだけではありません。3次元のものを表現したい場合は、3 次元配列 (または配列の配列の配列) を使用できます。スタートレックのファンは、ここでもチェスの例を使用するかもしれません。;-)

于 2014-07-19T14:36:34.620 に答える