好的,我有一个数组 A[4][4] 和另一个 A[16],它们只是彼此的不同表示。现在,我在二维数组上获得了一个元素位置,但我必须从一维数组访问它。IE,如果我被告知要访问一维数组中的元素 A[2][0],我该怎么做?
2 回答
在这个简单的示例中,A[2][0]
映射到,A[8]
因为您正在请求第三组四个中的第一个元素。同样,A[0][2]
映射到,A[2]
因为您正在请求第一组四个元素中的第三个元素。通常 ( A[i][j]
) 您正在请求 的 (i*4+j)-th 元素A
。
在更一般的情况下,您请求的是 (i*width+j)-th 元素。
这取决于您的编程语言和数组类型的选择。根据您的语言,数组以行优先顺序或列优先顺序存储:
编辑:根据文档,Java 没有多维数组:在 Java 中,多维数组是由数组组成的数组,即其元素是对数组对象的引用的数组。这意味着每一行可以有不同的长度,因此存储格式既不是行优先也不是列优先。
行优先顺序用于 C/C++、PL/I、Python、Speakeasy 等。列优先顺序用于 Fortran、MATLAB、GNU Octave、R、Julia、Rasdaman 和 Scilab。
在某些语言中,您还可以选择顺序(例如 MATLAB)
对于row-major order,A[2][0]
将在A[2*4+0]
(其中 4 是一行的大小):
偏移量 = 行*NUMCOLS + 列
对于column-major order,A[2][0]
将在A[0*4+2]
(其中 4 是一列的大小):
偏移量 = 行 + 列*NUMROWS
这真的取决于你的编程语言!