

一次元配列を二次元配列に見立てて扱うためには横幅×行位置＋列位置だと言われましたがよくわからないです。  
以下コードです。

[code]

    var SIDE_CELLS = 5;//横幅
    var COLUMN_CELLS = 3;//縦幅
    var ci = new Array(SIDE_CELLS * COLUMN_CELLS);
    var row = '';
    for(var z=0;z<ci.length;++z){
      ci[z]=z+1;
      row = row + (ci[z]<10 ? '  ' : ' ') + ci[z];
    }
    console.log(row);
    for(var y=0;y<COLUMN_CELLS;++y){
      row = '';
      for(var x=0;x<SIDE_CELLS;++x){
        var z = y*SIDE_CELLS+x;
        row = row + (ci[z]<10 ? '  ' : ' ') + ci[z];
      }
      console.log(row);
    }
    
[/code]

このコード `var z = y*SIDE_CELLS+x;` が二次元配列らしいのですが  
私は頭が弱いのでよくわかりません  
図のようにして考えてみようとおもってもイメージがまったく掴めません  
もう２日も考えているのですがどうか助けてください。


CC BY-SA 3.0
2016-09-16T15:53:30.167
28935
2016-09-17T01:17:13.243
2016-09-17T01:17:13.243
3054
18815
question
javascript array
二次元データを一次元配列で扱う際のインデックスの計算方法


`var z = y*SIDE_CELLS+x;` はインデックス（添字）ですね。

３×５の配列

[code]

    [
      [ 1,  2,  3,  4,  5],//row:0, ０行目１列めの内容は２（０始まり）
      [ 6,  7,  8,  9, 10],//row:1, １行目２列めの内容は８
      [11, 12, 13, 14, 15] //row:2
    ]
    
[/code]

を一次元の配列にすると

[code]

    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ]のように単なる並びになりますが
    
[/code]

そのインデックス(添字)は  
添字： `0,1,2,3,4,5,6,7,8, 9,10,11,12,13,14`  
内容：`[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]`  
列の数５でくくると  
添字： `{0,1,2,3,4},{5,6,7,8,9},{10,11,12,13,14}`

それぞれは「先頭の数＋{0,1,2,3,4}」になっていることがわかります。  
それぞれのくくりの先頭の数は、  
行の添字×列数（つまり０×５，１×５，２×５：０から始まる５(列の数)の倍数）になっていて  
{0,1,2,3,4}は列の添字になっていることがわかります。  
なので、  
`２次の配列[行の添字][列の添字]` は `１次の配列[行の添字×列数+列の添字]`  
（つまり２次の配列[１][２]は、１次の配列[１×５+２]と同じ(８を指す)）  
の関係があることがわかります。


CC BY-SA 3.0
2016-09-16T16:16:49.960
28937
2016-09-16T17:53:00.257
2016-09-16T17:53:00.257
5044
5044
28935
answer