我有,
int[10] oneDim = {1,2,3,4,5,6,7,8,9,10},index = 0;
如图here所示,我们从原点创建二维的.但是如何在(index = 0; index< 10; index)中迭代我的oneDim,以便在没有创建新索引的情况下可以得到我的列索引和行索引?
我希望它像这样打印它的索引到一个二维数组(2×5):
0,0 0,1 1,0 1,1 2,0 2,1 3,0 3,1 4,0 4,1
我认为这里的主要问题是获取列索引和行索引,而不创建二维索引.不是吗
解决方法
如果你想要行主序,给列rowIndex,列columnIndex,并且伪造(缺少一个更好的术语)具有numberOfColumns列的二维数组,公式是
rowIndex * numberOfColumns + columnIndex.
如果你想要行主序,列columnIndex并且伪造(缺少一个更好的术语)具有numberOfRow行的二维数组,公式是
columnIndex * numberOfRows + rowIndex.
所以,假设行主序:
int[10] oneDim = {1,10}; int rows = 2; int columns = 5; for (int row = 0; row < rows; row++) { for (int column = 0; column < columns; column++) { System.out.println(row + "," + column + ": " + oneDim[row * columns + column]); } }
输出:
0,0: 1 0,1: 2 0,2: 3 0,3: 4 0,4: 5 1,0: 6 1,1: 7 1,2: 8 1,3: 9 1,4: 10
并且如果您坚持使用单个for循环进行索引,假定以row-major顺序,您想要的公式如下所示:
int column = index % numberOfColumns; int row = (index - column) / numberOfColumns;
如果您使用的是列主要顺序,则您需要的公式如下所示:
int row = index % numberOfRows; int column = (index - row) / numberOfRows;
所以,
int[10] oneDim = {1,10}; int rows = 2; int columns = 5; for(int index = 0; index < 10; index++) { int column = index % columns; int row = (index - column) / columns; System.out.println(row + "," + column + ": " + oneDim[index]); }
将输出
0,4: 10
如预期.