将一维数组迭代为二维数组

时间:2009-11-30 02:50:48

标签: java arrays

我有,

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, index = 0;

如图here所示,我们从原点创建二维的。但是如何在oneDim内迭代for (index = 0; index < 10; index++)以便我可以获得列索引行索引 没有创建一个新的? 我希望它在将索引打印到二维数组(2x5)时看起来像这样:

0,0
0,1
1,0
1,1
2,0
2,1
3,0
3,1
4,0
4,1

我认为这里的主要问题是获取列索引行索引而不创建二维索引。不是吗?

3 个答案:

答案 0 :(得分:32)

如果你想要行主要订单,给定行rowIndex,列columnIndex并且伪造(缺少更好的术语)具有numberOfColumns列的二维数组,公式是

rowIndex * numberOfColumns + columnIndex.

如果你想要行主要订单,给定行rowIndex,列columnIndex并且伪造(缺少更好的术语)具有numberOfRow行的二维数组,公式是

columnIndex * numberOfRows + rowIndex.

因此,假设行主要顺序:

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 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循环进行索引,假设行主要顺序,您需要的公式如下:

int column = index % numberOfColumns;
int row = (index - column) / numberOfColumns;

如果您使用的是列主要订单,则需要的公式如下:

int row = index % numberOfRows;
int column = (index - row) / numberOfRows;

所以,

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 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, 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

正如所料。

答案 1 :(得分:8)

您显示的两个数字可以按照您显示的顺序计算,分别为index/2index%2。这就是“问题”的意思吗?

答案 2 :(得分:2)

我认为这是你想要做的......将一个暗淡的数组转换成一个双暗的数组。

//this is just pseudo code...not real syntax

int[10] oneDim = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int first_dim = 5;
int second_dim = 2;

int[first_dim][second_dim] new_array;

for (int fdi = 0; fdi < first_dim; fdi++){
   for (int sdi = 0; sdi < second_dim; sdi++) {

      //this is the crux...you're calculating the one dimensional index to access the value

      new_array[fdi][sdi] = oneDim[fdi*second_dim + sdi] 

   }
}