作者说:数组将其内容存储在一个width×height元素的数组中。元素是逐行存储的,因此,例如,第五行中的第三个元素(使用从零开始的索引)存储在位置4×宽度+ 2处。问题是如何有一个相干数组如果假设由于方括号中的等式,指数永远不会达到2,宽度为5;
let content = [];
function element(x,y){return undefined;}
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
content[y * width + x] = element(x, y);
}
}
嗨,我不确定我是否正确理解了你的问题,但我试着向你解释你所写的代码。
正如您所写,代码将2D矩阵表示为一维数组。所以,如果我们想要创建一个3 x 2矩阵,看起来像这样(逻辑上)
undefinded0, undefinded1
undefinded2, undefinded3
undefinded4, undefinded5
(我把一个数字用来让思考更容易)如果我们使用你的函数,表示就像这样
[undefined0, undefined1, undefined2, undefined3, undefined4, undefined5]
因为方括号中的等式,当索引永远不会达到2时宽度为5时,问题是如何有一个连贯的数组
这是真的,数组只有一个维度,这意味着只有一个元素保留在索引2.我认为你可能会混淆一行代表与某种二维二维表示。这里让我举个例子。如果你有这样的矩阵
[
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5],
[0, 1, 2, 3, 4, 5]
]
每行(甚至第五行)都有一个索引为2的元素,这是上面的表示有两个维度。