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

16

我有一个问题,

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

此页面所示,我们从原始数组创建二维数组。但我该如何在for (index = 0; index < 10; index++)循环中迭代oneDim,以便我能够获取列索引行索引,而不需要创建一个新的数组?我想要在打印其索引到一个(2x5)的二维数组时,它看起来像这样:

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

我认为这里的主要问题是获取列索引行索引而不创建二维数组。你觉得呢?


什么?你想让一个一维数组看起来像一个二维数组? - Simon Righarts
不太明白你想要什么,但是,创建一个带有列索引和行索引的对象数组? - Euclid
@Simon Righarts:这是标准操作。编译器每天都会为您完成它。 - jason
Tomiko,你看,大家对于你的问题并不是在努力解决你的问题,而是在努力理解你的问题。请仔细检查一下你的问题,这样我们就不必费力思考来理解你了。我相信你要做的事情很简单,一旦你花时间清楚地表达自己,肯定会得到有意义的帮助。 - pstanton
好的,psatanton。我想问的是: “如何将我的一维数组转换成二维数组?” - van_tomiko
3个回答

40
如果您想使用行主序,给定行索引 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
你是不是在第二段中想说“列”优先顺序?很抱歉让你在这么多年后再次编辑。 :-) - template boy

9
你展示的这两个数字可以按照你展示的顺序进行计算,分别为index/2index%2。你所说的“问题”是指这个吗?

3
我认为您想要做的是将一维数组转换为二维数组。
//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] 

   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接