2009-11-30 110 views
10

我有,迭代一維數組作爲二維數組

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

如​​所示,我們創建從原點的二維之一。但我怎麼遍歷我oneDimfor (index = 0; index < 10; index++),這樣我可以讓我的列索引行索引沒有創建一個新的? 我希望它看起來像這樣在打印過程中其索引到一個二維數組(2×5)

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

我認爲這裏的主要問題是如何在列索引行索引而無需創建二維的。你不是嗎?

+0

咦?你想要一個一維數組看起來像一個二維數組? –

+0

@Simon Righarts:這是標準。編譯器每天都會爲你做。 – jason

+0

tomiko,正如你所看到的人們正在努力理解你的問題,而不是努力解決你的問題。請回顧你的問題,以便我們不必費盡腦筋去理解你。我確信你想要做的事很簡單,一旦你花時間表達自己,我相信你會得到一些有意義的幫助。 – pstanton

回答

29

如果你想定的行優先的順序,排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 

預期。

+0

太棒了!這就是我要的。 謝謝。 :D –

+1

你的意思是「專欄」 - 第二段的主要訂單?在這麼多年之後,你不想讓你編輯。 :-) –

8

您顯示的兩個數字可按照您顯示的順序分別計算爲index/2index%2。這是你所說的「這個問題」的意思嗎?

+0

好吧,這是'問題'! 謝謝。 :D –

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] 

    } 
}