付録2.3 2次元配列、でも遅い
当初、2次元配列の書き方が分からず、1次元の配列で列数と行数を乗じた値をインデックス値としてアクセスしていました。入門書やWebでのJavaScript解説ページを見ても2次元配列のことは載ってないようです。まあ、一般的にはJavaScriptで2次元配列を使うシーンも無いとは思いますが。

以下のように書けば、2次元配列が使えます。でもこれが正しい書き方かどうかは分かりません。

2次元配列の書き方
// 2次元配列の定義
board = new Array(10);
for (i=0;i<10;i++) {
  board[i] = new Array(10);
}
// 2次元配列のアクセス方法例
board[0][0] = 0;

しかし、ペントミノを解くJavaScriptを1次元配列から2次元配列に書き直してみると、どうも解く速度が遅くなった気がしました。そこで、以下のような速度比較をしてみたところ、確かに1〜2割程度遅いようです。しかし、ソースの読みやすさを考えてペントミノのソースは2次元配列にしてあります。

1次元配列と2次元配列の速度比較
 (a) 2次元配列(b) 1次元配列(a) / (b)
NC 4.067.1秒6.3秒1.13
IE 3.047.4秒5.8秒1.27
ソース
// 2次元配列の定義
board = new Array(10);
for (i=0;i<10;i++) {
  board[i] = new Array(10);
}
// 2次元配列の初期化
for (k=0;k<1000;k++) {
  for (i=0;i<10;i++) {
    for (j=0;j<10;j++) {
      board[i][j] = 0;
    }
  }
}
// 2次元配列を1次元として定義
var x = 10, y = 10;
board = new Array(x*y);


// 配列の初期化
for (k=0;k<1000;k++) {
  for (i=0;i<10;i++) {
    for (j=0;j<10;j++) {
      board[i*y+j] = 0;
    }
  }
}
-

  Copyright (C) Nakamura 1999  

【↑付録2】   【←前へ】   【→次へ】