わかりました、いくつかの配列 A[4][4] と別の A[16] があります。これらはどちらも互いの異なる表現です。これで、2D 配列上の要素の位置が与えられましたが、1D 配列からアクセスする必要があります。IE、1D 配列の要素 A[2][0] にアクセスするように言われた場合、どうすればよいでしょうか?
2 に答える
これは、プログラミング言語と配列タイプの選択によって異なります。言語に応じて、配列は行優先順または列優先順のいずれかで格納されます。
編集:ドキュメントによると、Java には多次元配列がありません: Java では、多次元配列は配列の配列、つまり要素が配列オブジェクトへの参照である配列で構成されます。これは、各行の長さが異なる可能性があるため、格納形式が行優先でも列優先でもないことを意味します。
行優先順は、C/C++、PL/I、Python、Speakeasy などで使用されます。列優先順は、Fortran、MATLAB、GNU Octave、R、Julia、Rasdaman、および Scilab で使用されます。
一部の言語では、順序を選択することもできます (MATLAB など)。
行優先順の場合、次のようにA[2][0]
なりますA[2*4+0]
(4 は 1 行のサイズです)。
オフセット = 行*NUMCOLS + 列
column-major orderの場合、次のようにA[2][0]
なりますA[0*4+2]
(4 は 1 つの列のサイズです)。
オフセット = 行 + 列*NUMROWS
それは本当にあなたのプログラミング言語に依存します!
この単純な例では、3 番目の 4 つのグループの最初の要素を要求しているため、 にA[2][0]
マップされます。A[8]
同様に、最初の 4 つのグループの 3 番目の要素を要求しているため、 にA[0][2]
マップされます。A[2]
一般に ( A[i][j]
) の (i*4+j) 番目の要素を要求していますA
。
さらに一般的なケースでは、(i*width+j) 番目の要素を要求しています。