ほとんどの言語が多次元配列を格納する方法は、次のような変換を行うことです。
サイズがn matrix
(行) x m (列) で、"行優先順" (最初に行に沿ってカウントする) を使用している場合:
matrix[ i ][ j ] = array[ i*m + j ]
.
ここで、i は 0 から (n-1) まで、j は 0 から (m-1) までです。
つまり、基数 'm' の数体系のようなものです。最後の次元のサイズ (ここでは行数) は重要ではないことに注意してください。
概念を理解するために、「i」を行番号、「j」を列番号とする (3x5) 行列を考えてみてください。からナンバリングを開始する場合i,j = (0,0) --> 0
。「行優先」の順序付け(このような) の場合、レイアウトは次のようになります。
|-------- 5 ---------|
Row ______________________ _ _
0 |0 1 2 3 4 | |
1 |5 6 7 8 9 | 3
2 |10 11 12 13 14| _|_
|______________________|
Column 0 1 2 3 4
行に沿って移動する (つまり、列番号を増やす) と、カウントアップが開始されるため、配列インデックスは0,1,2...
です。2 行目に到達すると、既に5
エントリがあるため、indexes から開始します1*5 + 0,1,2...
。3 行目には2*5
既にエントリがあるため、インデックスは2*5 + 0,1,2...
です。
高次元の場合、このアイデアは一般化されます。つまり、matrix
L x N x Mの 3D の場合です。
matrix[ i ][ j ][ k ] = array[ i*(N*M) + j*M + k ]
等々。
本当に良い説明については、http://www.cplusplus.com/doc/tutorial/arrays/ を参照してください。または、より技術的な側面については、http: //en.wikipedia.org/wiki/Row-major_order