2014-09-30 57 views
0

如果我有一个大的多维数组(矩阵),如何重新排列这些元素,使得我有“y”值作为数组中的新“x”值?用x值转换多维数组

很难解释,所以让我举个例子。 我想要下面的数组。

[ 
[[0][1][2][3]], 
[[4][5][6][7]], 
[[8][9][10][11]], 
[[12][13][14][15]], 
] 

被变换成下面的阵列

[ 
[[0][4][8][12]], 
[[1][5][9][13]], 
[[2][6][10][14]], 
[[3][7][11][15]], 
] 

for (var i = 0; i < tablesOfData.length; i++) { 
    for (var j = 0; j < tablesOfData[i].length; j++) { 
     //Transform the array 
    } 
} 
+0

你的数组无效? – adeneo 2014-09-30 10:49:33

+0

你确定所有的行都包含相同数量的列吗? – Sasse 2014-09-30 10:52:10

+0

不,他们不。谢谢 – user1825441 2014-09-30 11:01:44

回答

0

所有行需要具有相同的列数。

如果行数与列数相同(如您的示例中所示),以下内容应该可以工作。如果它们不一样,那么你需要另外创建一个

for (var i = 0; < i tablesOfData.length; i++) { 
    for (var j = i; j < tablesOfData.length; j++) { 
     var temp = tablesOfData[i][j]; 
     tablesOfData[i][j] = tablesOfData[j][i]; 
     tablesOfData[j][i] = tablesOfData[i][j]; 
    } 
} 

你需要创建一个新的表和值添加到该表中,像这样:

var newTable = new int[tablesOfData[i].length](); 

for (var i = 0; < i tablesOfData.length; i++) { 
    for (var j = 0; j < tablesOfData.length; j++) { 
     if (i == 0) 
      newTable[j] = new int[tablesOfData.length](); 

     newTable[j][i] = tablesOfData[i][j]; 
    } 
} 

我写的代码记事本,所以它可能不是自己运行的正确语法,但逻辑应该是正确的。