如果我考虑平面直角坐标系,x和y是有序对的常见表示法,但是如果我使用一个二维数组,我会有myArray[row][col],其中row是y,col是x。这个顺序是错误的吗?还是我的想法有误?如果我想要真正的行和列(比如在游戏板上),那么myArray[x][y]是错误的。难道不应该是myArray[y][x]来真正模拟行列板吗?
如果我考虑平面直角坐标系,x和y是有序对的常见表示法,但是如果我使用一个二维数组,我会有myArray[row][col],其中row是y,col是x。这个顺序是错误的吗?还是我的想法有误?如果我想要真正的行和列(比如在游戏板上),那么myArray[x][y]是错误的。难道不应该是myArray[y][x]来真正模拟行列板吗?
{1,2}
是一行)。考虑到 C# 的血脉来自其他类 C 语言,行主序似乎更有可能。另请参见 https://stackoverflow.com/q/68049499/ 中的评论,其中解释了 CLI 指定使用行主序。 - jamesdlin这是我为了保持自己的心智健康而做的事情:
int x = array[0].length;
int y = array.length;
然后对于我进行的每个数组调用,我都会编写:
array[y][x]
这对于绘制图形算法和水平/垂直矩阵翻转特别有用。
for (int ys = 0; ys < Array.length; ys++)
for (int xs = 0; xs < Array[y].length; xs++)
{
do your stuff here
}
当然,在循环之外预先分配两个数组长度,以防每个周期都需要获取这些值。
不管好坏,不一致的符号表示法是从数学中继承而来的。
多维数组遵循矩阵符号表示法,其中Mi,j代表第i行和第j列的矩阵元素。
因此,如果用于表示矩阵,则多维数组不是反向的,但如果用于表示二维笛卡尔平面,则它们似乎是反向的,其中(x,y)是坐标的典型排序方式。
还要注意,二维笛卡尔平面通常是以y轴向上增长为方向。然而,这也与通常可视化2D数组/矩阵(以及大多数光栅图像的坐标系统)的方式相反。
我喜欢这个问题。你说得完全正确。大多数情况下,我们要么思考 (x, y) 要么思考 (row, col)。直到几年后我才开始质疑它。有一天我意识到,我总是将 for 循环处理为 x 是行,y 是列,尽管在平面几何中实际上是相反的。正如许多人所提到的,这在大多数情况下并不重要,但一致性是一件美妙的事情。
我敢打赌这个问题有很多不同的意见。底线是,只要你保持一致,它并不重要。如果你有其他库或类似的东西将使用相同的数据,为了更容易地集成,可能会有意义按照他们的方式进行。
如果这仅限于你自己的代码,请随意选择。我的个人偏好是使用myArray[y][x]。如果它们很大,将你要访问的项放在一起可能会带来性能上的好处。但是在非常晚的阶段(如果有的话)才考虑这个问题。