- ベストアンサー
3次元配列を1次元配列に
例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
おなじおなじ。 まず質問に書いてある様に2次元から考えたら良いよ。 a[5,3] の場合 MAX_X = 5; MAX_Y = 3; array[y*MAX_X + x]; // y = 現在のY ; x = 現在のX x0y0 , x1y0 , x2y0 , x3y0 , x4y0 x0y1 , x1y1 , x2y1 , x3y1 , x4y1 x0y2 , x1y2 , x2y2 , x3y2 , x4y2 ↓上の配列を1次元化すると… x0y0 , x1y0 , x2y0 , x3y0 , x4y0 , x0y1 , x1y1 , x2y1 , x3y1 , x4y1 , x0y2 , x1y2 , x2y2 , x3y2 , x4y2 これがYの1行に対してxが5個 これはOK? 5個ずつ(MAX_X個)ずつだからこうなる。 では a[5,3,8]; MAX_X = 5; MAX_Y = 3; //ここまでは一緒 MAX_Z = 8; Yの1行に対してX方向(の要素の数)が5個。 Zの行列に対して5x3個の「面」が8枚 どう?見えてきた?
その他の回答 (1)
- happycup
- ベストアンサー率42% (9/21)
3次元ならこんな感じです。 int array[ sizeLayer * sizeRow * sizeColumn ]; // array[ sizeLayer, sizeRow, sizeColumn ]; array[ sizeColumn * sizeRow * layer + sizeColumn * row + column ]; //以下は4次元配列を1次元で表した場合です。 int array[ sizeD4 * sizeD3 * sizeD2 * sizeD1 ]; // array[ sizeD4, sizeD3, sizeD2, sizeD1 ]; array[ sizeD3 * sizeD2 * SizeD1 * posD4 + sizeD2 * sizeD1 * posD3 + sizeD1 * posD2 + posD1 ]; 多次元配列を一次元で表すなら各次元の要素数を位置情報で乗じてその合計を求めれば一次元の位置情報になります。 上記の4次元を見てみると。 posD1 posD2 posD3 posD4 は各次元の位置 sizeD4 * sizeD3 * sizeD2 * sizeD1 は4次元配列の総要素数 sizeD3 * sizeD2 * SizeD1 は3次元の要素数 sizeD2 * SizeD1 は2次元の要素数 sizeD1 は1次元の要素数 次元数が増えても考え方は同じです。